Roadbound-BRR/lib/models/trip.dart

91 lines
3.2 KiB
Dart

class Trip {
final String scheduledTime; // "15:31" - default departure time (first non-empty time)
final String tripNumber; // "112"
final String dutyNumber; // "518"
final String runningNumber; // "518"
final String tripType; // "", "N", "R", "F"
final bool isFinishing;
final Map<String, String> stationTimes; // {"UXBG": "15:31", "HILL": "15:42", ...}
final List<String> stationOrder; // ["UXBG", "UXBG", "HILL", "ICKE", ...]
final String direction; // "outbound" or "inbound"
String? actualDepartureTime; // "15:33" (nullable - user input)
String? actualFleetNumber; // "33523" (nullable - user input)
Trip({
required this.scheduledTime,
required this.tripNumber,
required this.dutyNumber,
required this.runningNumber,
this.tripType = "",
this.isFinishing = false,
this.stationTimes = const {},
this.stationOrder = const [],
this.direction = "outbound",
this.actualDepartureTime,
this.actualFleetNumber,
});
bool get isComplete =>
actualDepartureTime != null && actualFleetNumber != null;
Trip copyWith({
String? scheduledTime,
String? tripNumber,
String? dutyNumber,
String? runningNumber,
String? tripType,
bool? isFinishing,
Map<String, String>? stationTimes,
List<String>? stationOrder,
String? direction,
String? actualDepartureTime,
String? actualFleetNumber,
}) {
return Trip(
scheduledTime: scheduledTime ?? this.scheduledTime,
tripNumber: tripNumber ?? this.tripNumber,
dutyNumber: dutyNumber ?? this.dutyNumber,
runningNumber: runningNumber ?? this.runningNumber,
tripType: tripType ?? this.tripType,
isFinishing: isFinishing ?? this.isFinishing,
stationTimes: stationTimes ?? this.stationTimes,
stationOrder: stationOrder ?? this.stationOrder,
direction: direction ?? this.direction,
actualDepartureTime: actualDepartureTime ?? this.actualDepartureTime,
actualFleetNumber: actualFleetNumber ?? this.actualFleetNumber,
);
}
Map<String, dynamic> toJson() {
return {
"scheduledTime": scheduledTime,
"tripNumber": tripNumber,
"dutyNumber": dutyNumber,
"runningNumber": runningNumber,
"tripType": tripType,
"isFinishing": isFinishing,
"stationTimes": stationTimes,
"stationOrder": stationOrder,
"direction": direction,
"actualDepartureTime": actualDepartureTime,
"actualFleetNumber": actualFleetNumber,
};
}
factory Trip.fromJson(Map<String, dynamic> json) {
return Trip(
scheduledTime: json["scheduledTime"] as String,
tripNumber: json["tripNumber"] as String,
dutyNumber: json["dutyNumber"] as String,
runningNumber: json["runningNumber"] as String,
tripType: json["tripType"] as String? ?? "",
isFinishing: json["isFinishing"] as bool? ?? false,
stationTimes: Map<String, String>.from(json["stationTimes"] as Map? ?? {}),
stationOrder: List<String>.from(json["stationOrder"] as List? ?? []),
direction: json["direction"] as String? ?? "outbound",
actualDepartureTime: json["actualDepartureTime"] as String?,
actualFleetNumber: json["actualFleetNumber"] as String?,
);
}
}