import 'package:flutter/widgets.dart'; import 'package:info_tren/models/ui_design.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_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/utils/default_ui_design.dart'; class MainPage extends StatelessWidget { final UiDesign? uiDesign; const MainPage({ Key? key, this.uiDesign }) : super(key: key); @override Widget build(BuildContext context) { final uiDesign = this.uiDesign ?? defaultUiDesign; switch (uiDesign) { case UiDesign.MATERIAL: return MainPageMaterial(); case UiDesign.CUPERTINO: return MainPageCupertino(); default: throw UnmatchedUiDesignException(uiDesign); } } } abstract class MainPageShared extends StatelessWidget { final String pageTitle = 'Info Tren'; final String moreOptionsText = 'Mai multe opțiuni'; 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}); }