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

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,),
],
);
}
}