91 lines
3.2 KiB
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?,
|
|
);
|
|
}
|
|
}
|