From 6fab8e1974cebea7d11c52e9e4d94b05ebb2e730 Mon Sep 17 00:00:00 2001 From: Dan Cojocaru Date: Sun, 12 Sep 2021 21:20:42 +0300 Subject: [PATCH] Move stuff from internship mac --- .../select_train_suggestions.dart | 3 ++- lib/main.dart | 4 +++- .../select_station/select_station.dart | 3 ++- .../select_station/select_station_cupertino.dart | 1 + .../view_station/view_station.dart | 8 +++++++- .../view_station/view_station_cupertino.dart | 2 ++ .../select_train/select_train.dart | 15 +++++++++++---- .../select_train/select_train_cupertino.dart | 1 + .../train_info_page/view_train/train_info.dart | 16 +++++++++++++--- .../view_train/train_info_cupertino.dart | 12 +++++++++++- lib/utils/string_number_prefix.dart | 14 ++++++++++++++ 11 files changed, 67 insertions(+), 12 deletions(-) create mode 100644 lib/utils/string_number_prefix.dart diff --git a/lib/components/select_train_suggestions/select_train_suggestions.dart b/lib/components/select_train_suggestions/select_train_suggestions.dart index 77637ab..cd18f56 100644 --- a/lib/components/select_train_suggestions/select_train_suggestions.dart +++ b/lib/components/select_train_suggestions/select_train_suggestions.dart @@ -6,6 +6,7 @@ import 'package:info_tren/components/select_train_suggestions/select_train_sugge import 'package:info_tren/models/train_operator_lines.dart'; import 'package:info_tren/models/ui_design.dart'; import 'package:info_tren/utils/default_ui_design.dart'; +import 'package:info_tren/utils/string_number_prefix.dart'; import 'package:tuple/tuple.dart'; class SelectTrainSuggestions extends StatefulWidget { @@ -100,7 +101,7 @@ abstract class SelectTrainSuggestionsState extends State uiDesign: widget.uiDesign, operatorName: tuple.item2, trains: tuple.item1, - onTrainSelected: widget.onTrainSelected, + onTrainSelected: (s) => widget.onTrainSelected(s.numberPrefix), )).toList(); return CustomScrollView( diff --git a/lib/main.dart b/lib/main.dart index c916652..85f15e3 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -34,8 +34,10 @@ Map routesByUiDesign(UiDesign uiDesign) => { return SelectTrainPage(uiDesign: uiDesign); }, TrainInfo.routeName: (context) { + final params = ModalRoute.of(context)!.settings.arguments as TrainInfoParams; return TrainInfo( - trainNumber: ModalRoute.of(context)!.settings.arguments as String, + trainNumber: params.trainNumber, + previousPageTitle: params.previousPageTitle, uiDesign: uiDesign, ); }, diff --git a/lib/pages/station_arrdep_page/select_station/select_station.dart b/lib/pages/station_arrdep_page/select_station/select_station.dart index 3992dd0..2430543 100644 --- a/lib/pages/station_arrdep_page/select_station/select_station.dart +++ b/lib/pages/station_arrdep_page/select_station/select_station.dart @@ -7,6 +7,7 @@ import 'package:info_tren/utils/default_ui_design.dart'; import 'package:info_tren/api/stations.dart' as apiStations; class SelectStationPage extends StatefulWidget { + static const pageTitle = 'Plecări/sosiri stație'; final UiDesign? uiDesign; const SelectStationPage({ Key? key, this.uiDesign }) : super(key: key); @@ -26,7 +27,7 @@ class SelectStationPage extends StatefulWidget { } abstract class SelectStationPageState extends State { - static const pageTitle = 'Plecări/sosiri stație'; + static const pageTitle = SelectStationPage.pageTitle; static const textFieldLabel = 'Numele stației'; static const roToEn = { 'ă': 'a', diff --git a/lib/pages/station_arrdep_page/select_station/select_station_cupertino.dart b/lib/pages/station_arrdep_page/select_station/select_station_cupertino.dart index 80e8516..b7a0b8b 100644 --- a/lib/pages/station_arrdep_page/select_station/select_station_cupertino.dart +++ b/lib/pages/station_arrdep_page/select_station/select_station_cupertino.dart @@ -8,6 +8,7 @@ class SelectStationPageStateCupertino extends SelectStationPageState { return CupertinoPageScaffold( navigationBar: CupertinoNavigationBar( middle: Text(SelectStationPageState.pageTitle), + previousPageTitle: 'Info Tren', ), child: SafeArea( bottom: false, diff --git a/lib/pages/station_arrdep_page/view_station/view_station.dart b/lib/pages/station_arrdep_page/view_station/view_station.dart index 90c02d9..6a60484 100644 --- a/lib/pages/station_arrdep_page/view_station/view_station.dart +++ b/lib/pages/station_arrdep_page/view_station/view_station.dart @@ -71,7 +71,13 @@ abstract class ViewStationPageState extends State { } void onTrainTapped(String trainNumber) { - Navigator.of(context).pushNamed(TrainInfo.routeName, arguments: trainNumber); + Navigator.of(context).pushNamed( + TrainInfo.routeName, + arguments: TrainInfoParams( + trainNumber: trainNumber, + previousPageTitle: stationName, + ), + ); } @override diff --git a/lib/pages/station_arrdep_page/view_station/view_station_cupertino.dart b/lib/pages/station_arrdep_page/view_station/view_station_cupertino.dart index 686045f..73b3520 100644 --- a/lib/pages/station_arrdep_page/view_station/view_station_cupertino.dart +++ b/lib/pages/station_arrdep_page/view_station/view_station_cupertino.dart @@ -4,6 +4,7 @@ import 'package:info_tren/components/refresh_future_builder.dart'; import 'package:flutter/src/widgets/framework.dart'; import 'package:info_tren/components/sliver_persistent_header_padding.dart'; import 'package:info_tren/models/station_data.dart'; +import 'package:info_tren/pages/station_arrdep_page/select_station/select_station.dart'; import 'package:info_tren/pages/station_arrdep_page/view_station/view_station.dart'; class ViewStationPageStateCupertino extends ViewStationPageState { @@ -12,6 +13,7 @@ class ViewStationPageStateCupertino extends ViewStationPageState { return CupertinoPageScaffold( navigationBar: CupertinoNavigationBar( middle: Text(snapshot.hasData ? snapshot.data!.stationName : stationName), + previousPageTitle: SelectStationPage.pageTitle, ), child: snapshot.hasData ? CupertinoTabScaffold( tabBar: CupertinoTabBar( diff --git a/lib/pages/train_info_page/select_train/select_train.dart b/lib/pages/train_info_page/select_train/select_train.dart index a17dec8..79a3f3c 100644 --- a/lib/pages/train_info_page/select_train/select_train.dart +++ b/lib/pages/train_info_page/select_train/select_train.dart @@ -13,14 +13,21 @@ import 'package:tuple/tuple.dart'; typedef TrainSelectedCallback(int trainNumber); class SelectTrainPage extends StatefulWidget { + static const String routeName = "/trainInfo/selectTrain"; + static const String pageTitle = 'Informații despre tren'; + final UiDesign? uiDesign; SelectTrainPage({Key? key, this.uiDesign}) : super(key: key); - static String routeName = "/trainInfo/selectTrain"; - void onTrainSelected(BuildContext context, String selection) { - Navigator.of(context).pushNamed(TrainInfo.routeName, arguments: selection); + Navigator.of(context).pushNamed( + TrainInfo.routeName, + arguments: TrainInfoParams( + trainNumber: selection, + previousPageTitle: pageTitle, + ), + ); } @override @@ -38,8 +45,8 @@ class SelectTrainPage extends StatefulWidget { } abstract class SelectTrainPageState extends State { - final String pageTitle = 'Informații despre tren'; final String textFieldLabel = 'Numărul trenului'; + final String pageTitle = SelectTrainPage.pageTitle; TextEditingController trainNoController = TextEditingController(); diff --git a/lib/pages/train_info_page/select_train/select_train_cupertino.dart b/lib/pages/train_info_page/select_train/select_train_cupertino.dart index e9d0ba4..220c80e 100644 --- a/lib/pages/train_info_page/select_train/select_train_cupertino.dart +++ b/lib/pages/train_info_page/select_train/select_train_cupertino.dart @@ -8,6 +8,7 @@ class SelectTrainPageStateCupertino extends SelectTrainPageState { return CupertinoPageScaffold( navigationBar: CupertinoNavigationBar( middle: Text(pageTitle), + previousPageTitle: 'Info Tren', ), child: SafeArea( bottom: false, diff --git a/lib/pages/train_info_page/view_train/train_info.dart b/lib/pages/train_info_page/view_train/train_info.dart index 75bf744..1b0d751 100644 --- a/lib/pages/train_info_page/view_train/train_info.dart +++ b/lib/pages/train_info_page/view_train/train_info.dart @@ -10,14 +10,23 @@ import 'package:info_tren/pages/train_info_page/view_train/train_info_cupertino. import 'package:info_tren/pages/train_info_page/view_train/train_info_material.dart'; import 'package:info_tren/utils/default_ui_design.dart'; +class TrainInfoParams { + final String trainNumber; + final String? previousPageTitle; + + TrainInfoParams({required this.trainNumber, this.previousPageTitle,}); +} class TrainInfo extends StatelessWidget { static String routeName = "/trainInfo/display"; final UiDesign? uiDesign; final String trainNumber; + final String previousPageTitle; - TrainInfo({Key? key, required this.trainNumber, this.uiDesign}): super(key: key); + TrainInfo({Key? key, required this.trainNumber, this.uiDesign, String? previousPageTitle,}) + : previousPageTitle = previousPageTitle ?? 'Înapoi' + , super(key: key); @override Widget build(BuildContext context) { @@ -46,10 +55,10 @@ class TrainInfo extends StatelessWidget { ); case UiDesign.CUPERTINO: if ([RefreshFutureBuilderState.none, RefreshFutureBuilderState.waiting].contains(snapshot.state)) { - return TrainInfoLoadingCupertino(title: trainNumber.toString(), loadingText: "Se încarcă...",); + return TrainInfoLoadingCupertino(title: trainNumber.toString(), loadingText: "Se încarcă...", previousPageTitle: previousPageTitle,); } else if (snapshot.state == RefreshFutureBuilderState.error) { - return TrainInfoErrorCupertino(title: '$trainNumber - Error', error: snapshot.error!, refresh: refresh,); + return TrainInfoErrorCupertino(title: '$trainNumber - Error', error: snapshot.error!, refresh: refresh, previousPageTitle: previousPageTitle,); } return TrainInfoCupertino( @@ -57,6 +66,7 @@ class TrainInfo extends StatelessWidget { refresh: refresh, isRefreshing: snapshot.state == RefreshFutureBuilderState.refreshing, onViewYesterdayTrain: onViewYesterdayTrain, + previousPageTitle: previousPageTitle, ); default: throw UnmatchedUiDesignException(uiDesign); diff --git a/lib/pages/train_info_page/view_train/train_info_cupertino.dart b/lib/pages/train_info_page/view_train/train_info_cupertino.dart index a0cf70d..7977c2b 100644 --- a/lib/pages/train_info_page/view_train/train_info_cupertino.dart +++ b/lib/pages/train_info_page/view_train/train_info_cupertino.dart @@ -12,7 +12,9 @@ import 'package:info_tren/pages/train_info_page/view_train/train_info_cupertino_ import 'package:info_tren/utils/state_to_string.dart'; class TrainInfoLoadingCupertino extends TrainInfoLoading { - TrainInfoLoadingCupertino({required String title, String? loadingText}) + final String? previousPageTitle; + + TrainInfoLoadingCupertino({required String title, String? loadingText, this.previousPageTitle,}) : super( title: title, loadingText: loadingText, @@ -23,6 +25,7 @@ class TrainInfoLoadingCupertino extends TrainInfoLoading { return CupertinoPageScaffold( navigationBar: CupertinoNavigationBar( middle: Text(title), + previousPageTitle: previousPageTitle ?? 'Înapoi', ), child: Center( child: loadingWidget, @@ -32,10 +35,13 @@ class TrainInfoLoadingCupertino extends TrainInfoLoading { } class TrainInfoErrorCupertino extends TrainInfoError { + final String? previousPageTitle; + TrainInfoErrorCupertino({ required Object error, required String title, Future Function()? refresh, + this.previousPageTitle, }) : super( error: error, title: title, @@ -47,6 +53,7 @@ class TrainInfoErrorCupertino extends TrainInfoError { return CupertinoPageScaffold( navigationBar: CupertinoNavigationBar( middle: Text(title), + previousPageTitle: previousPageTitle ?? 'Înapoi', ), child: Center( child: Column( @@ -73,12 +80,14 @@ class TrainInfoCupertino extends StatelessWidget { final Future Function()? refresh; final bool? isRefreshing; final void Function()? onViewYesterdayTrain; + final String previousPageTitle; TrainInfoCupertino({ required this.trainData, this.refresh, this.isRefreshing, this.onViewYesterdayTrain, + required this.previousPageTitle, }); @override @@ -86,6 +95,7 @@ class TrainInfoCupertino extends StatelessWidget { return CupertinoPageScaffold( navigationBar: CupertinoNavigationBar( middle: Text("Informații despre ${trainData.rank} ${trainData.number}"), + previousPageTitle: previousPageTitle, trailing: refresh == null ? null : isRefreshing == true ? CupertinoActivityIndicator() : CupertinoButton( padding: const EdgeInsets.all(0), alignment: Alignment.center, diff --git a/lib/utils/string_number_prefix.dart b/lib/utils/string_number_prefix.dart new file mode 100644 index 0000000..ddfc244 --- /dev/null +++ b/lib/utils/string_number_prefix.dart @@ -0,0 +1,14 @@ +extension NumberPrefix on String { + String get numberPrefix { + final sb = StringBuffer(); + for (final c in this.runes) { + if ('0'.runes.first <= c && c <= '9'.runes.first) { + sb.writeCharCode(c); + } + else { + break; + } + } + return sb.toString(); + } +} \ No newline at end of file