import 'package:flutter/widgets.dart'; 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'; 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'; import 'package:info_tren/providers.dart'; class MainPage extends ConsumerWidget { const MainPage({super.key,}); @override 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 get popupMenu => [ MainPageAction( name: 'Despre aplicație', action: (context) { Navigator.of(context).pushNamed(AboutPage.routeName); }, ), ]; List 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ă', 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) { Navigator.of(context).pushNamed(SelectStationPage.routeName); } onRoutePlanPageInvoke(BuildContext context) { } } class MainPageAction { final String name; final String? description; final void Function(BuildContext context)? action; MainPageAction({required this.name, this.action, this.description}); }