loadable error screen, reload actions, autoreload
This commit is contained in:
@ -1,8 +1,16 @@
|
||||
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/holidays/holidays.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 'marianumMessage/view/marianum_message_list_view.dart';
|
||||
|
||||
class AppModule {
|
||||
String name;
|
||||
@ -11,14 +19,37 @@ class AppModule {
|
||||
|
||||
AppModule(this.name, this.icon, this.create);
|
||||
|
||||
static Map<Module, AppModule> modules() => {
|
||||
Module.timetable: AppModule('Vertretung', Icons.calendar_month, Timetable.new),
|
||||
Module.talk: AppModule('Talk', Icons.chat, ChatList.new),
|
||||
Module.files: AppModule('Files', Icons.folder, Files.new),
|
||||
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.holiday_village, Holidays.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 Module {
|
||||
enum Modules {
|
||||
timetable,
|
||||
talk,
|
||||
files,
|
||||
|
@ -14,7 +14,7 @@ class MarianumMessageBloc extends LoadableHydratedBloc<MarianumMessageEvent, Mar
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> loadState() async {
|
||||
Future<void> gatherData() async {
|
||||
var messages = await repo.getMessages();
|
||||
add(Emit((state) => state.copyWith(messageList: messages)));
|
||||
}
|
||||
|
@ -6,6 +6,7 @@ class MarianumMessageGetMessages extends DataLoader<MarianumMessageList> {
|
||||
@override
|
||||
Future<MarianumMessageList> fetch() async {
|
||||
await Future.delayed(const Duration(seconds: 3));
|
||||
throw UnimplementedError("Test");
|
||||
return const MarianumMessageList(base: '', messages: [MarianumMessage(date: '', name: 'RepoTest', url: '')]);
|
||||
}
|
||||
}
|
||||
|
@ -1,5 +1,3 @@
|
||||
import 'dart:developer';
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
@ -18,14 +16,10 @@ class MarianumMessageListView extends StatelessWidget {
|
||||
@override
|
||||
Widget build(BuildContext context) => BlocModule<MarianumMessageBloc, LoadableState<MarianumMessageState>>(
|
||||
create: (context) => MarianumMessageBloc(),
|
||||
child: (context, state) {
|
||||
// if(value.primaryLoading()) return const LoadingSpinner();
|
||||
log(state.toString());
|
||||
return Scaffold(
|
||||
child: (context, bloc, state) => Scaffold(
|
||||
appBar: AppBar(
|
||||
title: const Text('Marianum Message'),
|
||||
actions: [
|
||||
IconButton(onPressed: () => context.read<MarianumMessageBloc>().add(MessageEvent()), icon: Icon(Icons.abc)),
|
||||
IconButton(onPressed: () => context.read<MarianumMessageBloc>().add(Emit((state) => MarianumMessageState(messageList: MarianumMessageList(base: "", messages: [MarianumMessage(url: "", name: "Teeest", date: "now")])))), icon: Icon(Icons.add)),
|
||||
IconButton(onPressed: () => context.read<MarianumMessageBloc>().add(ClearState()), icon: Icon(Icons.add))
|
||||
],
|
||||
@ -50,7 +44,6 @@ class MarianumMessageListView extends StatelessWidget {
|
||||
}
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
)
|
||||
);
|
||||
}
|
||||
|
Reference in New Issue
Block a user