286 lines
7.6 KiB
Dart
286 lines
7.6 KiB
Dart
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.display2,
|
|
);
|
|
}
|
|
}
|
|
|
|
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.body2.copyWith(fontStyle: FontStyle.italic),
|
|
textAlign: TextAlign.left,
|
|
),
|
|
),
|
|
Text(
|
|
"-",
|
|
style: Theme.of(context).textTheme.body2.copyWith(fontStyle: FontStyle.italic),
|
|
textAlign: TextAlign.center,
|
|
),
|
|
Expanded(
|
|
child: Text(
|
|
"${trainData.route.split("-")[1]}",
|
|
style: Theme.of(context).textTheme.body2.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.body1,
|
|
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.headline,
|
|
);
|
|
}
|
|
}
|
|
|
|
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.headline,),
|
|
),
|
|
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.body1.copyWith(color: Colors.red.shade700),)
|
|
: Text("${-(trainData.lastInfo.delay)} minute mai devreme", style: Theme.of(context).textTheme.body1.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.headline,),
|
|
),
|
|
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,),
|
|
],
|
|
);
|
|
}
|
|
}
|