Client/lib/state/app/modules/app_modules.dart
2024-06-12 15:53:13 +02:00

61 lines
2.3 KiB
Dart

import 'package:flutter/material.dart';
import 'package:persistent_bottom_nav_bar_v2/persistent_bottom_nav_bar_v2.dart';
import '../../../api/mhsl/breaker/getBreakers/getBreakersResponse.dart';
import '../../../model/breakers/Breaker.dart';
import '../../../view/pages/files/files.dart';
import '../../../view/pages/more/roomplan/roomplan.dart';
import '../../../view/pages/talk/chatList.dart';
import '../../../view/pages/timetable/timetable.dart';
import '../../../widget/centeredLeading.dart';
import 'gradeAverages/view/grade_averages_view.dart';
import 'holidays/view/holidays_view.dart';
import 'marianumMessage/view/marianum_message_list_view.dart';
class AppModule {
String name;
IconData icon;
Widget Function() create;
AppModule(this.name, this.icon, this.create);
static Map<Modules, AppModule> modules() => {
Modules.timetable: AppModule('Vertretung', Icons.calendar_month, Timetable.new),
Modules.talk: AppModule('Talk', Icons.chat, ChatList.new),
Modules.files: AppModule('Files', Icons.folder, Files.new),
Modules.marianumMessage: AppModule('Marianum Message', Icons.newspaper, MarianumMessageListView.new),
Modules.roomPlan: AppModule('Raumplan', Icons.location_pin, Roomplan.new),
Modules.gradeAveragesCalculator: AppModule('Notendurschnittsrechner', Icons.calculate, GradeAveragesView.new),
Modules.holidays: AppModule('Schulferien', Icons.time_to_leave, HolidaysView.new),
};
static AppModule getModule(Modules module) => modules()[module]!;
Widget toListTile(BuildContext context) => ListTile(
leading: CenteredLeading(Icon(icon)),
title: Text(name),
onTap: () => pushScreen(context, withNavBar: false, screen: create()),
trailing: const Icon(Icons.arrow_right),
);
PersistentTabConfig toBottomTab(BuildContext context, {Widget Function(IconData icon)? itemBuilder}) => PersistentTabConfig(
screen: Breaker(breaker: BreakerArea.global, child: create()),
item: ItemConfig(
activeForegroundColor: Theme.of(context).primaryColor,
inactiveForegroundColor: Theme.of(context).colorScheme.secondary,
icon: itemBuilder == null ? Icon(icon) : itemBuilder(icon),
title: name
),
);
}
enum Modules {
timetable,
talk,
files,
marianumMessage,
roomPlan,
gradeAveragesCalculator,
holidays,
}