info_tren/lib/train_info_display.dart

289 lines
8 KiB
Dart
Raw Normal View History

2019-07-23 16:56:51 +03:00
import 'package:flutter/material.dart';
import 'package:info_tren/models.dart';
import 'package:info_tren/stations_list.dart.old';
2019-07-23 16:56:51 +03:00
class TrainInfoDisplayData extends StatelessWidget {
final TrainData trainData;
const TrainInfoDisplayData(this.trainData, {super.key,});
2019-07-23 16:56:51 +03:00
@override
Widget build(BuildContext context) {
return SingleChildScrollView(
child: Column(
children: <Widget>[
Padding(
padding: const EdgeInsets.all(8.0),
child: TrainName(trainData),
),
Padding(
padding: const EdgeInsets.all(4.0),
child: TrainRoute(trainData),
),
Padding(
padding: const EdgeInsets.all(4.0),
child: TrainOperator(trainData),
),
Padding(
padding: const EdgeInsets.all(4.0),
child: TotalDetails(trainData),
),
const CustomDivider(),
Padding(
padding: const EdgeInsets.all(4.0),
child: Destination(trainData),
),
const CustomDivider(),
2019-07-23 16:56:51 +03:00
Padding(
padding: const EdgeInsets.all(4.0),
child: LastUpdate(trainData),
),
// if (trainData.nextStop.station.isNotEmpty)
// ...[
// CustomDivider(),
// Padding(
// padding: const EdgeInsets.all(4.0),
// child: NextStop(trainData),
// ),
// ],
const CustomDivider(),
2019-07-23 16:56:51 +03:00
Padding(
padding: const EdgeInsets.all(4.0),
child: TrainStatus(trainData),
),
Divider(color: Theme.of(context).colorScheme.secondary,),
2019-07-23 16:56:51 +03:00
Padding(
padding: const EdgeInsets.all(4.0),
child: StationsList(trainData),
),
SafeArea(
bottom: true,
left: false,
right: false,
top: false,
2022-10-31 01:30:29 +01:00
child: Container(),
2019-07-23 16:56:51 +03:00
)
],
),
);
}
}
class TrainName extends StatelessWidget {
final TrainData trainData;
const TrainName(this.trainData, {super.key,});
2019-07-23 16:56:51 +03:00
@override
Widget build(BuildContext context) {
return Text(
"${trainData.rank} ${trainData.number}",
2022-10-31 01:30:29 +01:00
style: Theme.of(context).textTheme.displaySmall,
2019-07-23 16:56:51 +03:00
);
}
}
class TrainRoute extends StatelessWidget {
final TrainData trainData;
const TrainRoute(this.trainData, {super.key,});
2019-07-23 16:56:51 +03:00
@override
Widget build(BuildContext context) {
return Row(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
Expanded(
child: Text(
trainData.route.from,
2022-10-31 01:30:29 +01:00
style: Theme.of(context).textTheme.bodyLarge?.copyWith(fontStyle: FontStyle.italic),
2019-07-23 16:56:51 +03:00
textAlign: TextAlign.left,
),
),
Text(
"-",
2022-10-31 01:30:29 +01:00
style: Theme.of(context).textTheme.bodyLarge?.copyWith(fontStyle: FontStyle.italic),
2019-07-23 16:56:51 +03:00
textAlign: TextAlign.center,
),
Expanded(
child: Text(
trainData.route.to,
2022-10-31 01:30:29 +01:00
style: Theme.of(context).textTheme.bodyLarge?.copyWith(fontStyle: FontStyle.italic),
2019-07-23 16:56:51 +03:00
textAlign: TextAlign.right,
),
),
]
);
}
}
class TrainOperator extends StatelessWidget {
final TrainData trainData;
const TrainOperator(this.trainData, {super.key,});
2019-07-23 16:56:51 +03:00
@override
Widget build(BuildContext context) {
return Text(
"Operat de ${trainData.operator}",
2022-10-31 01:30:29 +01:00
style: Theme.of(context).textTheme.bodyMedium,
2019-07-23 16:56:51 +03:00
textAlign: TextAlign.center,
);
}
}
class TrainStatus extends StatelessWidget {
final TrainData trainData;
const TrainStatus(this.trainData, {super.key,});
2019-07-23 16:56:51 +03:00
@override
Widget build(BuildContext context) {
return Text(
trainData.status.toString(),
2019-07-23 16:56:51 +03:00
textAlign: TextAlign.center,
2022-10-31 01:30:29 +01:00
style: Theme.of(context).textTheme.headlineSmall,
2019-07-23 16:56:51 +03:00
);
}
}
class Destination extends StatelessWidget {
final TrainData trainData;
const Destination(this.trainData, {super.key,});
2019-07-23 16:56:51 +03:00
@override
Widget build(BuildContext context) {
final destinationStation = trainData.stations.last;
2019-07-23 16:56:51 +03:00
return Column(
children: <Widget>[
Text(
"Destinația: ${destinationStation.name}",
2019-07-23 16:56:51 +03:00
textAlign: TextAlign.center,
),
Text(
"Sosește la ${destinationStation.arrival!.scheduleTime}",
2019-07-23 16:56:51 +03:00
textAlign: TextAlign.center,
),
],
);
}
}
class LastUpdate extends StatelessWidget {
final TrainData trainData;
const LastUpdate(this.trainData, {super.key,});
2019-07-23 16:56:51 +03:00
@override
Widget build(BuildContext context) {
if (trainData.status == null) {
return Container();
}
2019-07-23 16:56:51 +03:00
return Column(
mainAxisSize: MainAxisSize.min,
children: <Widget>[
Padding(
padding: const EdgeInsets.all(2.0),
2022-10-31 01:30:29 +01:00
child: Text("Ultima informație", style: Theme.of(context).textTheme.headlineSmall,),
2019-07-23 16:56:51 +03:00
),
Row(
children: <Widget>[
Padding(
padding: const EdgeInsets.all(2.0),
child: Text(trainData.status!.station, textAlign: TextAlign.left,),
2019-07-23 16:56:51 +03:00
),
Expanded(child: Container(),),
Padding(
padding: const EdgeInsets.all(2.0),
child: Text(trainData.status!.state.toString(), textAlign: TextAlign.right,),
2019-07-23 16:56:51 +03:00
)
],
),
Padding(
padding: const EdgeInsets.all(2.0),
child: trainData.status!.delay == 0
2022-10-31 01:30:29 +01:00
? Text("Fără întârziere", style: Theme.of(context).textTheme.bodySmall,)
: trainData.status!.delay > 0
2022-10-31 01:30:29 +01:00
? Text("${trainData.status!.delay} minute întârziere", style: Theme.of(context).textTheme.bodyMedium?.copyWith(color: Colors.red.shade700),)
: Text("${-(trainData.status!.delay)} minute mai devreme", style: Theme.of(context).textTheme.bodyMedium?.copyWith(color: Colors.green.shade700),)
2019-07-23 16:56:51 +03:00
),
// TODO: Implement status report time detection
// Padding(
// padding: const EdgeInsets.all(2.0),
// child: Text("Raportat la ${trainData.lastInfo.dateAndTime}"),
// ),
2019-07-23 16:56:51 +03:00
],
);
}
}
// class NextStop extends StatelessWidget {
// final TrainData trainData;
// NextStop(this.trainData);
2019-07-23 16:56:51 +03:00
// @override
// Widget build(BuildContext context) {
// return Column(
// mainAxisSize: MainAxisSize.min,
// children: <Widget>[
// Padding(
// padding: const EdgeInsets.all(2.0),
// child: Text("Următoarea oprire", style: Theme.of(context).textTheme.headline5,),
// ),
// Row(
// children: <Widget>[
// Padding(
// padding: const EdgeInsets.all(2.0),
// child: Text(trainData.nextStop.station, textAlign: TextAlign.left,),
// ),
// Expanded(child: Container(),),
// Padding(
// padding: const EdgeInsets.all(2.0),
// child: Text(trainData.nextStop.dateAndTime, textAlign: TextAlign.right,),
// )
// ],
// ),
// ],
// );
// }
// }
2019-07-23 16:56:51 +03:00
class TotalDetails extends StatelessWidget {
final TrainData trainData;
const TotalDetails(this.trainData, {super.key,});
2019-07-23 16:56:51 +03:00
@override
Widget build(BuildContext context) {
return Row(
children: <Widget>[
Text(
'${trainData.stations.last.km} km',
2022-10-31 01:30:29 +01:00
style: Theme.of(context).textTheme.bodySmall,
2019-07-23 16:56:51 +03:00
textAlign: TextAlign.left,
),
Expanded(
child: Container()
),
// Text(
// trainData.tripLength,
// style: Theme.of(context).textTheme.caption,
// textAlign: TextAlign.right,
// )
2019-07-23 16:56:51 +03:00
],
);
}
}
class CustomDivider extends StatelessWidget {
const CustomDivider({super.key});
2019-07-23 16:56:51 +03:00
@override
Widget build(BuildContext context) {
return Column(
mainAxisSize: MainAxisSize.min,
children: <Widget>[
Container(height: 4,),
2022-10-31 01:30:29 +01:00
const Divider(),
2019-07-23 16:56:51 +03:00
Container(height: 4,),
],
);
}
}