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.
 
 
 
 
 
 

100 lines
2.8 KiB

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/settings/setings_page.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<MainPageAction> get popupMenu => [
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ă',
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,
});
}