info_tren/lib/pages/main/main_page.dart

101 lines
2.8 KiB
Dart
Raw Normal View History

import 'package:flutter/widgets.dart';
2022-10-31 03:44:29 +01:00
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:info_tren/models.dart';
import 'package:info_tren/pages/about/about_page.dart';
import 'package:info_tren/pages/main/main_page_cupertino.dart';
import 'package:info_tren/pages/main/main_page_fluent.dart';
import 'package:info_tren/pages/main/main_page_material.dart';
2022-11-19 05:35:51 +01:00
import 'package:info_tren/pages/settings/setings_page.dart';
2021-08-28 04:35:58 +03:00
import 'package:info_tren/pages/station_arrdep_page/select_station/select_station.dart';
import 'package:info_tren/pages/train_info_page/select_train/select_train.dart';
2022-10-31 03:44:29 +01:00
import 'package:info_tren/providers.dart';
2022-10-31 03:44:29 +01:00
class MainPage extends ConsumerWidget {
const MainPage({super.key,});
@override
2022-10-31 03:44:29 +01:00
Widget build(BuildContext context, WidgetRef ref) {
final uiDesign = ref.watch(uiDesignProvider);
switch (uiDesign) {
case UiDesign.MATERIAL:
return const MainPageMaterial();
case UiDesign.CUPERTINO:
return const MainPageCupertino();
case UiDesign.FLUENT:
return const MainPageFluent();
default:
throw UnmatchedUiDesignException(uiDesign);
}
}
}
abstract class MainPageShared extends StatelessWidget {
final String pageTitle = 'Info Tren';
final String moreOptionsText = 'Mai multe opțiuni';
const MainPageShared({super.key});
List<MainPageAction> get popupMenu => [
2022-11-19 05:35:51 +01:00
MainPageAction(
name: 'Setări',
action: (context) {
Navigator.of(context).pushNamed(SettingsPage.routeName);
},
),
MainPageAction(
name: 'Despre aplicație',
action: (context) {
Navigator.of(context).pushNamed(AboutPage.routeName);
},
),
];
List<MainPageAction> get options => [
MainPageAction(
name: 'Informații despre tren',
description: 'Află informații despre parcursul unui anumit tren',
action: (context) {
onTrainInfoPageInvoke(context);
},
),
MainPageAction(
name: 'Tabelă plecari/sosiri',
description: 'Vezi trenurile care pleacă și sosesc dintr-o gară',
2021-08-28 04:35:58 +03:00
action: (context) {
onStationBoardPageInvoke(context);
},
),
MainPageAction(
name: 'Planificare rută',
description: 'Găsește trenurile disponibile pentru călătoria între două gări',
// TODO: Implement route planning
action: null,
),
];
onTrainInfoPageInvoke(BuildContext context) {
Navigator.of(context).pushNamed(SelectTrainPage.routeName);
}
onStationBoardPageInvoke(BuildContext context) {
2021-08-28 04:35:58 +03:00
Navigator.of(context).pushNamed(SelectStationPage.routeName);
}
onRoutePlanPageInvoke(BuildContext context) {
}
}
class MainPageAction {
final String name;
final String? description;
final void Function(BuildContext context)? action;
2022-11-19 05:35:51 +01:00
MainPageAction({
required this.name,
this.action,
this.description,
});
}