You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
85 lines
2.5 KiB
85 lines
2.5 KiB
import 'package:flutter/widgets.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_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<MainPageAction> get popupMenu => [ |
|
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ă', |
|
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}); |
|
}
|
|
|