69 lines
1.7 KiB
Dart
69 lines
1.7 KiB
Dart
|
import 'package:flutter/widgets.dart';
|
||
|
import 'package:info_tren/models/ui_design.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/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';
|
||
|
|
||
|
List<MainPageOption> get options => [
|
||
|
MainPageOption(
|
||
|
name: 'Informații despre tren',
|
||
|
action: (BuildContext context) {
|
||
|
onTrainInfoPageInvoke(context);
|
||
|
},
|
||
|
),
|
||
|
MainPageOption(
|
||
|
name: 'Tabelă plecari/sosiri',
|
||
|
// TODO: Implement departure/arrival
|
||
|
action: null,
|
||
|
),
|
||
|
MainPageOption(
|
||
|
name: 'Planificare rută',
|
||
|
// TODO: Implement route planning
|
||
|
action: null,
|
||
|
),
|
||
|
];
|
||
|
|
||
|
onTrainInfoPageInvoke(BuildContext context) {
|
||
|
Navigator.of(context).pushNamed(SelectTrainPage.routeName);
|
||
|
}
|
||
|
|
||
|
onStationBoardPageInvoke(BuildContext context) {
|
||
|
|
||
|
}
|
||
|
|
||
|
onRoutePlanPageInvoke(BuildContext context) {
|
||
|
|
||
|
}
|
||
|
}
|
||
|
|
||
|
class MainPageOption {
|
||
|
final String name;
|
||
|
final void Function(BuildContext context)? action;
|
||
|
|
||
|
MainPageOption({required this.name, this.action});
|
||
|
}
|