From 53b676266bff2f4289167248bced7959d74191c7 Mon Sep 17 00:00:00 2001 From: Dan Cojocaru Date: Sun, 15 Sep 2019 03:41:43 +0300 Subject: [PATCH] Added Km Badge colour - separated KmBadge - added colour for different types of events --- lib/main.dart | 17 ++- ...in_info_cupertino_DisplayTrainStation.dart | 142 +++++++++++++----- 2 files changed, 114 insertions(+), 45 deletions(-) diff --git a/lib/main.dart b/lib/main.dart index 866890c..f6ad378 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -2,6 +2,7 @@ import 'dart:io' show Platform; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; +import 'package:info_tren/models/train_data.dart'; import 'package:info_tren/train_info_page/train_info.dart'; import 'package:info_tren/train_info_page/train_info_cupertino.dart'; import 'package:info_tren/train_info_page/train_info_material.dart'; @@ -32,8 +33,12 @@ class StartPoint extends StatelessWidget { return TrainInfoPromptMaterial(); }, TrainInfo.routeName: (context) { - return TrainInfoMaterial( - trainNumber: ModalRoute.of(context).settings.arguments as int, + return TrainDataWebViewAdapter( + builder: (context) { + return TrainInfoMaterial( + trainNumber: ModalRoute.of(context).settings.arguments as int, + ); + }, ); }, }, @@ -55,8 +60,12 @@ class StartPoint extends StatelessWidget { return TrainInfoPromptCupertino(); }, TrainInfo.routeName: (context) { - return TrainInfoCupertino( - trainNumber: ModalRoute.of(context).settings.arguments as int, + return TrainDataWebViewAdapter( + builder: (context) { + return TrainInfoCupertino( + trainNumber: ModalRoute.of(context).settings.arguments as int, + ); + }, ); }, } diff --git a/lib/train_info_page/train_info_cupertino_DisplayTrainStation.dart b/lib/train_info_page/train_info_cupertino_DisplayTrainStation.dart index 667406d..c2ae599 100644 --- a/lib/train_info_page/train_info_cupertino_DisplayTrainStation.dart +++ b/lib/train_info_page/train_info_cupertino_DisplayTrainStation.dart @@ -1,5 +1,7 @@ import 'package:flutter/cupertino.dart'; import 'package:info_tren/models/train_data.dart'; +import 'package:info_tren/train_info_page/train_info.dart'; +import 'package:info_tren/train_info_page/train_info_constants.dart'; class DisplayTrainStation extends StatelessWidget { final OnDemandStation station; @@ -15,46 +17,24 @@ class DisplayTrainStation extends StatelessWidget { Row( mainAxisSize: MainAxisSize.max, children: [ - Padding( - padding: const EdgeInsets.all(8), - child: Container( - decoration: BoxDecoration( - borderRadius: BorderRadius.circular(10), - border: Border.all( - width: 2, - color: FOREGROUND_WHITE, - ), - // color: CupertinoColors.activeOrange, - ), - width: 48, - height: 48, - child: Column( - mainAxisSize: MainAxisSize.min, - children: [ - Expanded( - child: Center( - child: FutureDisplay( - future: station.km, - builder: (context, value) { - return Text( - value.toString(), - style: CupertinoTheme.of(context).textTheme.textStyle.copyWith( - fontSize: 18, - fontWeight: FontWeight.w100, - ), - textAlign: TextAlign.center, - ); - }, - ), - ), - ), - Text( - "km", - style: CupertinoTheme.of(context).textTheme.textStyle.copyWith(fontSize: 10), - ), - ], - ), - ), + FutureDisplay( + future: Future.wait([ + station.delay, + station.realOrEstimate, + station.observations, + ]), + builder: (context, data) { + final isDelayed = (data[0] as int) > 0; + final isOnTime = !isDelayed && (data[1] as RealOrEstimate) == RealOrEstimate.real; + final isNotScheduled = data[2] == "ONI"; + + return KmBadge( + station: station, + isNotScheduled: isNotScheduled, + isDelayed: isDelayed, + isOnTime: isOnTime, + ); + } ), Expanded( child: FutureDisplay>( @@ -216,4 +196,84 @@ class DisplayTrainStation extends StatelessWidget { ], ); } -} \ No newline at end of file +} + +class KmBadge extends StatelessWidget { + final OnDemandStation station; + final bool isNotScheduled; + final bool isOnTime; + final bool isDelayed; + + KmBadge({ + @required this.station, + this.isNotScheduled = false, + this.isOnTime = false, + this.isDelayed = false, + }); + + @override + Widget build(BuildContext context) { + Color foregroundColor = FOREGROUND_WHITE; + Color backgroundColor; + + if (isNotScheduled) { + foregroundColor = Color.fromRGBO(225, 175, 30, 1); + backgroundColor = Color.fromRGBO(80, 40, 10, 1); + } + else if (isOnTime) { + foregroundColor = Color.fromRGBO(130, 175, 65, 1); + backgroundColor = Color.fromRGBO(40, 80, 10, 1); + } + else if (isDelayed) { + foregroundColor = Color.fromRGBO(225, 75, 30, 1); + backgroundColor = Color.fromRGBO(80, 20, 10, 1); + } + + return Padding( + padding: const EdgeInsets.all(8), + child: Container( + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(10), + border: Border.all( + width: 2, + color: foregroundColor, + ), + color: backgroundColor, + // color: CupertinoColors.activeOrange, + ), + width: 48, + height: 48, + child: Column( + mainAxisSize: MainAxisSize.min, + children: [ + Expanded( + child: Center( + child: FutureDisplay( + future: station.km, + builder: (context, value) { + return Text( + value.toString(), + style: CupertinoTheme.of(context).textTheme.textStyle.copyWith( + fontSize: 18, + fontWeight: FontWeight.w100, + color: foregroundColor + ), + textAlign: TextAlign.center, + ); + }, + ), + ), + ), + Text( + "km", + style: CupertinoTheme.of(context).textTheme.textStyle.copyWith( + fontSize: 10, + color: foregroundColor, + ), + ), + ], + ), + ), + ); + } +}