61 lines
2.3 KiB
Dart
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,
|
|
}
|