Browse Source

Add support for IC trains

master
Kenneth Bruen 2 years ago
parent
commit
9637551d7a
Signed by: kbruen
GPG Key ID: C1980A470C3EE5B1
  1. 5
      lib/components/select_train_suggestions/select_train_suggestions_cupertino.dart
  2. 5
      lib/components/select_train_suggestions/select_train_suggestions_fluent.dart
  3. 3
      lib/components/select_train_suggestions/select_train_suggestions_material.dart
  4. 39
      lib/components/train_id_text_span.dart
  5. 27
      lib/pages/station_arrdep_page/view_station/view_station_cupertino.dart
  6. 14
      lib/pages/station_arrdep_page/view_station/view_station_fluent.dart
  7. 14
      lib/pages/station_arrdep_page/view_station/view_station_material.dart
  8. 14
      lib/pages/train_info_page/view_train/train_info_cupertino.dart
  9. 18
      lib/pages/train_info_page/view_train/train_info_fluent.dart
  10. 18
      lib/pages/train_info_page/view_train/train_info_material.dart

5
lib/components/select_train_suggestions/select_train_suggestions_cupertino.dart

@ -1,6 +1,7 @@
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:info_tren/components/cupertino_divider.dart'; import 'package:info_tren/components/cupertino_divider.dart';
import 'package:info_tren/components/select_train_suggestions/select_train_suggestions.dart'; import 'package:info_tren/components/select_train_suggestions/select_train_suggestions.dart';
import 'package:info_tren/components/train_id_text_span.dart';
import 'package:info_tren/models.dart'; import 'package:info_tren/models.dart';
class SelectTrainSuggestionsCupertino extends SelectTrainSuggestionsShared { class SelectTrainSuggestionsCupertino extends SelectTrainSuggestionsShared {
@ -69,8 +70,8 @@ class OperatorAutocompleteTileCupertino extends OperatorAutocompleteTile {
style: CupertinoTheme.of(context).textTheme.textStyle.copyWith(fontSize: 10, fontWeight: FontWeight.w200), style: CupertinoTheme.of(context).textTheme.textStyle.copyWith(fontSize: 10, fontWeight: FontWeight.w200),
textAlign: TextAlign.left, textAlign: TextAlign.left,
), ),
Text( Text.rich(
"${train.rank} ${train.number}", trainIdSpan(rank: train.rank, number: train.number),
textAlign: TextAlign.left, textAlign: TextAlign.left,
), ),
], ],

5
lib/components/select_train_suggestions/select_train_suggestions_fluent.dart

@ -1,5 +1,6 @@
import 'package:fluent_ui/fluent_ui.dart'; import 'package:fluent_ui/fluent_ui.dart';
import 'package:info_tren/components/select_train_suggestions/select_train_suggestions.dart'; import 'package:info_tren/components/select_train_suggestions/select_train_suggestions.dart';
import 'package:info_tren/components/train_id_text_span.dart';
import 'package:info_tren/models.dart'; import 'package:info_tren/models.dart';
class SelectTrainSuggestionsFluent extends SelectTrainSuggestionsShared { class SelectTrainSuggestionsFluent extends SelectTrainSuggestionsShared {
@ -68,8 +69,8 @@ class OperatorAutocompleteTileFluent extends OperatorAutocompleteTile {
style: FluentTheme.of(context).typography.body?.copyWith(fontSize: 10, fontWeight: FontWeight.w200), style: FluentTheme.of(context).typography.body?.copyWith(fontSize: 10, fontWeight: FontWeight.w200),
textAlign: TextAlign.left, textAlign: TextAlign.left,
), ),
Text( Text.rich(
"${train.rank} ${train.number}", trainIdSpan(rank: train.rank, number: train.number),
textAlign: TextAlign.left, textAlign: TextAlign.left,
), ),
], ],

3
lib/components/select_train_suggestions/select_train_suggestions_material.dart

@ -1,5 +1,6 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:info_tren/components/select_train_suggestions/select_train_suggestions.dart'; import 'package:info_tren/components/select_train_suggestions/select_train_suggestions.dart';
import 'package:info_tren/components/train_id_text_span.dart';
import 'package:info_tren/models.dart'; import 'package:info_tren/models.dart';
class SelectTrainSuggestionsMaterial extends SelectTrainSuggestionsShared { class SelectTrainSuggestionsMaterial extends SelectTrainSuggestionsShared {
@ -44,7 +45,7 @@ class OperatorAutocompleteTileMaterial extends OperatorAutocompleteTile {
Widget build(BuildContext context) { Widget build(BuildContext context) {
return ListTile( return ListTile(
dense: true, dense: true,
title: Text("${train.rank} ${train.number}"), title: Text.rich(trainIdSpan(rank: train.rank, number: train.number)),
subtitle: Text(operatorName), subtitle: Text(operatorName),
onTap: () { onTap: () {
onTrainSelected(train.number); onTrainSelected(train.number);

39
lib/components/train_id_text_span.dart

@ -0,0 +1,39 @@
import 'package:flutter/gestures.dart';
import 'package:flutter/rendering.dart';
TextSpan trainIdSpan({
required String rank,
required String number,
Locale? locale,
MouseCursor? mouseCursor,
void Function(PointerEnterEvent)? onEnter,
void Function(PointerExitEvent)? onExit,
GestureRecognizer? recognizer,
String? semanticsLabel,
bool? spellOut,
TextStyle? style,
}) => TextSpan(
children: [
TextSpan(
text: rank,
style: TextStyle(
inherit: true,
color: rank.startsWith('IC')
? const Color.fromARGB(255, 0, 255, 0)
: rank.startsWith('IR')
? const Color.fromARGB(255, 255, 0, 0)
: null,
),
),
const TextSpan(text: ' '),
TextSpan(text: number),
],
locale: locale,
mouseCursor: mouseCursor,
onEnter: onEnter,
onExit: onExit,
recognizer: recognizer,
semanticsLabel: semanticsLabel,
spellOut: spellOut,
style: style,
);

27
lib/pages/station_arrdep_page/view_station/view_station_cupertino.dart

@ -3,6 +3,7 @@ import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:info_tren/components/loading/loading.dart'; import 'package:info_tren/components/loading/loading.dart';
import 'package:info_tren/components/refresh_future_builder.dart'; import 'package:info_tren/components/refresh_future_builder.dart';
import 'package:info_tren/components/sliver_persistent_header_padding.dart'; import 'package:info_tren/components/sliver_persistent_header_padding.dart';
import 'package:info_tren/components/train_id_text_span.dart';
import 'package:info_tren/models.dart'; import 'package:info_tren/models.dart';
import 'package:info_tren/pages/station_arrdep_page/view_station/view_station.dart'; import 'package:info_tren/pages/station_arrdep_page/view_station/view_station.dart';
import 'package:info_tren/providers.dart'; import 'package:info_tren/providers.dart';
@ -66,18 +67,7 @@ class ViewStationPageCupertino extends ViewStationPageShared {
onTap: () => onTrainTapped(context, item.train), onTap: () => onTrainTapped(context, item.train),
child: CupertinoFormRow( child: CupertinoFormRow(
prefix: Text.rich( prefix: Text.rich(
TextSpan( trainIdSpan(rank: item.train.rank, number: item.train.number),
children: [
TextSpan(
text: item.train.rank,
style: TextStyle(
color: item.train.rank.startsWith('IR') ? const Color.fromARGB(255, 255, 0, 0) : null,
),
),
const TextSpan(text: ' '),
TextSpan(text: item.train.number,),
],
),
), ),
helper: Text.rich( helper: Text.rich(
TextSpan( TextSpan(
@ -99,18 +89,7 @@ class ViewStationPageCupertino extends ViewStationPageShared {
onTap: () => onTrainTapped(context, item.train), onTap: () => onTrainTapped(context, item.train),
child: CupertinoFormRow( child: CupertinoFormRow(
prefix: Text.rich( prefix: Text.rich(
TextSpan( trainIdSpan(rank: item.train.rank, number: item.train.number),
children: [
TextSpan(
text: item.train.rank,
style: TextStyle(
color: item.train.rank.startsWith('IR') ? const Color.fromARGB(255, 255, 0, 0) : null,
),
),
const TextSpan(text: ' '),
TextSpan(text: item.train.number,),
],
),
), ),
helper: Text.rich( helper: Text.rich(
TextSpan( TextSpan(

14
lib/pages/station_arrdep_page/view_station/view_station_fluent.dart

@ -6,6 +6,7 @@ import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:info_tren/components/badge/badge.dart'; import 'package:info_tren/components/badge/badge.dart';
import 'package:info_tren/components/loading/loading.dart'; import 'package:info_tren/components/loading/loading.dart';
import 'package:info_tren/components/refresh_future_builder.dart'; import 'package:info_tren/components/refresh_future_builder.dart';
import 'package:info_tren/components/train_id_text_span.dart';
import 'package:info_tren/models.dart'; import 'package:info_tren/models.dart';
import 'package:info_tren/pages/station_arrdep_page/view_station/view_station.dart'; import 'package:info_tren/pages/station_arrdep_page/view_station/view_station.dart';
import 'package:info_tren/providers.dart'; import 'package:info_tren/providers.dart';
@ -177,18 +178,7 @@ class ViewStationPageFluent extends ViewStationPageShared {
child: ListTile( child: ListTile(
// isThreeLine: item.status.delay != 0, // isThreeLine: item.status.delay != 0,
title: Text.rich( title: Text.rich(
TextSpan( trainIdSpan(rank: item.train.rank, number: item.train.number),
children: [
TextSpan(
text: item.train.rank,
style: TextStyle(
color: item.train.rank.startsWith('IR') ? const Color.fromARGB(255, 255, 0, 0) : null,
),
),
const TextSpan(text: ' '),
TextSpan(text: item.train.number,),
],
),
), ),
subtitle: Text.rich( subtitle: Text.rich(
TextSpan( TextSpan(

14
lib/pages/station_arrdep_page/view_station/view_station_material.dart

@ -5,6 +5,7 @@ import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:info_tren/components/badge/badge.dart'; import 'package:info_tren/components/badge/badge.dart';
import 'package:info_tren/components/loading/loading.dart'; import 'package:info_tren/components/loading/loading.dart';
import 'package:info_tren/components/refresh_future_builder.dart'; import 'package:info_tren/components/refresh_future_builder.dart';
import 'package:info_tren/components/train_id_text_span.dart';
import 'package:info_tren/models.dart'; import 'package:info_tren/models.dart';
import 'package:info_tren/pages/station_arrdep_page/view_station/view_station.dart'; import 'package:info_tren/pages/station_arrdep_page/view_station/view_station.dart';
import 'package:info_tren/providers.dart'; import 'package:info_tren/providers.dart';
@ -142,18 +143,7 @@ class ViewStationPageMaterial extends ViewStationPageShared {
child: ListTile( child: ListTile(
isThreeLine: item.status.delay != 0, isThreeLine: item.status.delay != 0,
title: Text.rich( title: Text.rich(
TextSpan( trainIdSpan(rank: item.train.rank, number: item.train.number),
children: [
TextSpan(
text: item.train.rank,
style: TextStyle(
color: item.train.rank.startsWith('IR') ? const Color.fromARGB(255, 255, 0, 0) : null,
),
),
const TextSpan(text: ' '),
TextSpan(text: item.train.number,),
],
),
), ),
subtitle: Text.rich( subtitle: Text.rich(
TextSpan( TextSpan(

14
lib/pages/train_info_page/view_train/train_info_cupertino.dart

@ -4,6 +4,7 @@ import 'package:flutter/cupertino.dart';
import 'package:flutter/gestures.dart'; import 'package:flutter/gestures.dart';
import 'package:info_tren/components/cupertino_divider.dart'; import 'package:info_tren/components/cupertino_divider.dart';
import 'package:info_tren/components/sliver_persistent_header_padding.dart'; import 'package:info_tren/components/sliver_persistent_header_padding.dart';
import 'package:info_tren/components/train_id_text_span.dart';
import 'package:info_tren/models.dart'; import 'package:info_tren/models.dart';
import 'package:info_tren/pages/train_info_page/train_info_constants.dart'; import 'package:info_tren/pages/train_info_page/train_info_constants.dart';
import 'package:info_tren/pages/train_info_page/view_train/train_info.dart'; import 'package:info_tren/pages/train_info_page/view_train/train_info.dart';
@ -562,18 +563,7 @@ class DisplayTrainID extends StatelessWidget {
child: Padding( child: Padding(
padding: const EdgeInsets.all(8.0), padding: const EdgeInsets.all(8.0),
child: Text.rich( child: Text.rich(
TextSpan( trainIdSpan(rank: trainData.rank, number: trainData.number),
children: [
TextSpan(
text: trainData.rank,
style: TextStyle(
color: trainData.rank.startsWith('IR') ? const Color.fromARGB(255, 255, 0, 0) : null,
),
),
const TextSpan(text: ' '),
TextSpan(text: trainData.number,),
],
),
style: CupertinoTheme.of(context).textTheme.navLargeTitleTextStyle, style: CupertinoTheme.of(context).textTheme.navLargeTitleTextStyle,
), ),
), ),

18
lib/pages/train_info_page/view_train/train_info_fluent.dart

@ -1,5 +1,6 @@
import 'package:fluent_ui/fluent_ui.dart'; import 'package:fluent_ui/fluent_ui.dart';
import 'package:flutter/gestures.dart'; import 'package:flutter/gestures.dart';
import 'package:info_tren/components/train_id_text_span.dart';
import 'package:info_tren/models.dart'; import 'package:info_tren/models.dart';
import 'package:info_tren/pages/station_arrdep_page/view_station/view_station.dart'; import 'package:info_tren/pages/station_arrdep_page/view_station/view_station.dart';
import 'package:info_tren/pages/train_info_page/view_train/train_info.dart'; import 'package:info_tren/pages/train_info_page/view_train/train_info.dart';
@ -303,22 +304,7 @@ class DisplayTrainID extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Text.rich( return Text.rich(
TextSpan( trainIdSpan(rank: trainData.rank, number: trainData.number),
children: [
TextSpan(
text: trainData.rank,
style: TextStyle(
color: trainData.rank.startsWith('IR')
? const Color.fromARGB(255, 255, 0, 0)
: null,
),
),
const TextSpan(text: ' '),
TextSpan(
text: trainData.number,
),
],
),
style: FluentTheme.of(context).typography.title?.copyWith( style: FluentTheme.of(context).typography.title?.copyWith(
color: FluentTheme.of(context).typography.body?.color, color: FluentTheme.of(context).typography.body?.color,
fontWeight: FontWeight.bold, fontWeight: FontWeight.bold,

18
lib/pages/train_info_page/view_train/train_info_material.dart

@ -1,6 +1,7 @@
import 'package:flutter/gestures.dart'; import 'package:flutter/gestures.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:info_tren/components/slim_app_bar.dart'; import 'package:info_tren/components/slim_app_bar.dart';
import 'package:info_tren/components/train_id_text_span.dart';
import 'package:info_tren/models.dart'; import 'package:info_tren/models.dart';
import 'package:info_tren/pages/station_arrdep_page/view_station/view_station.dart'; import 'package:info_tren/pages/station_arrdep_page/view_station/view_station.dart';
import 'package:info_tren/pages/train_info_page/view_train/train_info.dart'; import 'package:info_tren/pages/train_info_page/view_train/train_info.dart';
@ -318,22 +319,7 @@ class DisplayTrainID extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
return Text.rich( return Text.rich(
TextSpan( trainIdSpan(rank: trainData.rank, number: trainData.number),
children: [
TextSpan(
text: trainData.rank,
style: TextStyle(
color: trainData.rank.startsWith('IR')
? const Color.fromARGB(255, 255, 0, 0)
: null,
),
),
const TextSpan(text: ' '),
TextSpan(
text: trainData.number,
),
],
),
style: (isSmallScreen(context) style: (isSmallScreen(context)
? Theme.of(context).textTheme.headlineMedium ? Theme.of(context).textTheme.headlineMedium
: Theme.of(context).textTheme.displaySmall) : Theme.of(context).textTheme.displaySmall)

Loading…
Cancel
Save