You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
286 lines
7.6 KiB
286 lines
7.6 KiB
import 'package:flutter/material.dart'; |
|
import 'package:info_tren/stations_list.dart'; |
|
|
|
import 'models/train_data.dart'; |
|
|
|
class TrainInfoDisplayData extends StatelessWidget { |
|
final TrainData trainData; |
|
|
|
TrainInfoDisplayData(this.trainData); |
|
|
|
@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), |
|
), |
|
if (trainData.destination.station.isNotEmpty) |
|
...[ |
|
CustomDivider(), |
|
Padding( |
|
padding: const EdgeInsets.all(4.0), |
|
child: Destination(trainData), |
|
), |
|
], |
|
CustomDivider(), |
|
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), |
|
), |
|
], |
|
CustomDivider(), |
|
Padding( |
|
padding: const EdgeInsets.all(4.0), |
|
child: TrainStatus(trainData), |
|
), |
|
Divider(color: Theme.of(context).accentColor,), |
|
Padding( |
|
padding: const EdgeInsets.all(4.0), |
|
child: StationsList(trainData), |
|
), |
|
SafeArea( |
|
child: Container(), |
|
bottom: true, |
|
left: false, |
|
right: false, |
|
top: false, |
|
) |
|
], |
|
), |
|
); |
|
} |
|
|
|
} |
|
|
|
class TrainName extends StatelessWidget { |
|
final TrainData trainData; |
|
TrainName(this.trainData); |
|
|
|
@override |
|
Widget build(BuildContext context) { |
|
return Text( |
|
"${trainData.rang} ${trainData.trainNumber}", |
|
style: Theme.of(context).textTheme.headline3, |
|
); |
|
} |
|
} |
|
|
|
class TrainRoute extends StatelessWidget { |
|
final TrainData trainData; |
|
TrainRoute(this.trainData); |
|
|
|
@override |
|
Widget build(BuildContext context) { |
|
return Row( |
|
crossAxisAlignment: CrossAxisAlignment.center, |
|
children: [ |
|
Expanded( |
|
child: Text( |
|
"${trainData.route.split("-")[0]}", |
|
style: Theme.of(context).textTheme.bodyText1.copyWith(fontStyle: FontStyle.italic), |
|
textAlign: TextAlign.left, |
|
), |
|
), |
|
Text( |
|
"-", |
|
style: Theme.of(context).textTheme.bodyText1.copyWith(fontStyle: FontStyle.italic), |
|
textAlign: TextAlign.center, |
|
), |
|
Expanded( |
|
child: Text( |
|
"${trainData.route.split("-")[1]}", |
|
style: Theme.of(context).textTheme.bodyText1.copyWith(fontStyle: FontStyle.italic), |
|
textAlign: TextAlign.right, |
|
), |
|
), |
|
] |
|
); |
|
} |
|
} |
|
|
|
class TrainOperator extends StatelessWidget { |
|
final TrainData trainData; |
|
TrainOperator(this.trainData); |
|
|
|
@override |
|
Widget build(BuildContext context) { |
|
return Text( |
|
"Operat de ${trainData.operator}", |
|
style: Theme.of(context).textTheme.bodyText2, |
|
textAlign: TextAlign.center, |
|
); |
|
} |
|
} |
|
|
|
class TrainStatus extends StatelessWidget { |
|
final TrainData trainData; |
|
TrainStatus(this.trainData); |
|
|
|
@override |
|
Widget build(BuildContext context) { |
|
return Text( |
|
trainData.state, |
|
textAlign: TextAlign.center, |
|
style: Theme.of(context).textTheme.headline5, |
|
); |
|
} |
|
} |
|
|
|
class Destination extends StatelessWidget { |
|
final TrainData trainData; |
|
Destination(this.trainData); |
|
|
|
@override |
|
Widget build(BuildContext context) { |
|
if (trainData.destination.station.isEmpty) return Container(); |
|
|
|
return Column( |
|
children: <Widget>[ |
|
Text( |
|
"Destinația: ${trainData.destination.station}", |
|
textAlign: TextAlign.center, |
|
), |
|
Text( |
|
"Sosește în ${trainData.destination.dateAndTime.split(" ")[0]} la ${trainData.destination.dateAndTime.split(" ")[1]}", |
|
textAlign: TextAlign.center, |
|
), |
|
], |
|
); |
|
} |
|
} |
|
|
|
class LastUpdate extends StatelessWidget { |
|
final TrainData trainData; |
|
LastUpdate(this.trainData); |
|
|
|
@override |
|
Widget build(BuildContext context) { |
|
return Column( |
|
mainAxisSize: MainAxisSize.min, |
|
children: <Widget>[ |
|
Padding( |
|
padding: const EdgeInsets.all(2.0), |
|
child: Text("Ultima informație", style: Theme.of(context).textTheme.headline5,), |
|
), |
|
Row( |
|
children: <Widget>[ |
|
Padding( |
|
padding: const EdgeInsets.all(2.0), |
|
child: Text(trainData.lastInfo.station, textAlign: TextAlign.left,), |
|
), |
|
Expanded(child: Container(),), |
|
Padding( |
|
padding: const EdgeInsets.all(2.0), |
|
child: Text(trainData.lastInfo.event, textAlign: TextAlign.right,), |
|
) |
|
], |
|
), |
|
Padding( |
|
padding: const EdgeInsets.all(2.0), |
|
child: trainData.lastInfo.delay == 0 |
|
? Text("Fără întârziere", style: Theme.of(context).textTheme.caption,) |
|
: trainData.lastInfo.delay > 0 |
|
? Text("${trainData.lastInfo.delay} minute întârziere", style: Theme.of(context).textTheme.bodyText2.copyWith(color: Colors.red.shade700),) |
|
: Text("${-(trainData.lastInfo.delay)} minute mai devreme", style: Theme.of(context).textTheme.bodyText2.copyWith(color: Colors.green.shade700),) |
|
), |
|
Padding( |
|
padding: const EdgeInsets.all(2.0), |
|
child: Text("Raportat la ${trainData.lastInfo.dateAndTime}"), |
|
), |
|
], |
|
); |
|
} |
|
} |
|
|
|
class NextStop extends StatelessWidget { |
|
final TrainData trainData; |
|
NextStop(this.trainData); |
|
|
|
@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,), |
|
) |
|
], |
|
), |
|
], |
|
); |
|
} |
|
} |
|
|
|
class TotalDetails extends StatelessWidget { |
|
final TrainData trainData; |
|
TotalDetails(this.trainData); |
|
|
|
@override |
|
Widget build(BuildContext context) { |
|
return Row( |
|
children: <Widget>[ |
|
Text( |
|
trainData.distance, |
|
style: Theme.of(context).textTheme.caption, |
|
textAlign: TextAlign.left, |
|
), |
|
Expanded( |
|
child: Container() |
|
), |
|
Text( |
|
trainData.tripLength, |
|
style: Theme.of(context).textTheme.caption, |
|
textAlign: TextAlign.right, |
|
) |
|
], |
|
); |
|
} |
|
} |
|
|
|
class CustomDivider extends StatelessWidget { |
|
@override |
|
Widget build(BuildContext context) { |
|
return Column( |
|
mainAxisSize: MainAxisSize.min, |
|
children: <Widget>[ |
|
Container(height: 4,), |
|
Divider(), |
|
Container(height: 4,), |
|
], |
|
); |
|
} |
|
}
|
|
|