From c443a1d567b8bb6569c280d59bce920edf3d933a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Elias=20M=C3=BCller?= Date: Sun, 23 Jun 2024 20:31:43 +0200 Subject: [PATCH] fixed disclaimer not showing on first visit --- .../loadableState/view/loadable_state_consumer.dart | 5 +++++ .../loadableHydratedBloc/loadable_hydrated_bloc.dart | 3 +-- lib/state/app/modules/app_modules.dart | 2 +- .../app/modules/holidays/bloc/holidays_bloc.dart | 1 + .../app/modules/holidays/view/holidays_view.dart | 12 +++++++----- 5 files changed, 15 insertions(+), 8 deletions(-) diff --git a/lib/state/app/infrastructure/loadableState/view/loadable_state_consumer.dart b/lib/state/app/infrastructure/loadableState/view/loadable_state_consumer.dart index 238ab94..b0cdc65 100644 --- a/lib/state/app/infrastructure/loadableState/view/loadable_state_consumer.dart +++ b/lib/state/app/infrastructure/loadableState/view/loadable_state_consumer.dart @@ -24,6 +24,11 @@ class LoadableStateConsumer().state; + + if(!loadableState.isLoading && onLoad != null) { + WidgetsBinding.instance.addPostFrameCallback((timeStamp) => onLoad!(loadableState.data)); + } + var childWidget = ConditionalWrapper( condition: loadableState.reFetch != null, wrapper: (child) => RefreshIndicator( diff --git a/lib/state/app/infrastructure/utilityWidgets/loadableHydratedBloc/loadable_hydrated_bloc.dart b/lib/state/app/infrastructure/utilityWidgets/loadableHydratedBloc/loadable_hydrated_bloc.dart index cdcedf7..66e20d6 100644 --- a/lib/state/app/infrastructure/utilityWidgets/loadableHydratedBloc/loadable_hydrated_bloc.dart +++ b/lib/state/app/infrastructure/utilityWidgets/loadableHydratedBloc/loadable_hydrated_bloc.dart @@ -103,10 +103,9 @@ abstract class LoadableHydratedBloc< Map? toJson(LoadableState state) { Map? data; try { - data = toStorage(state.data); + data = state.data == null ? null : toStorage(state.data); } catch(e) { log('Failed to save state ${TState.toString()}: ${e.toString()}'); - data = null; } return LoadableSaveContext.wrap( diff --git a/lib/state/app/modules/app_modules.dart b/lib/state/app/modules/app_modules.dart index df84651..796cfe6 100644 --- a/lib/state/app/modules/app_modules.dart +++ b/lib/state/app/modules/app_modules.dart @@ -26,7 +26,7 @@ class AppModule { 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), + Modules.holidays: AppModule('Schulferien', Icons.flight, HolidaysView.new), }; static AppModule getModule(Modules module) => modules()[module]!; diff --git a/lib/state/app/modules/holidays/bloc/holidays_bloc.dart b/lib/state/app/modules/holidays/bloc/holidays_bloc.dart index 248a080..3f82d04 100644 --- a/lib/state/app/modules/holidays/bloc/holidays_bloc.dart +++ b/lib/state/app/modules/holidays/bloc/holidays_bloc.dart @@ -16,6 +16,7 @@ class HolidaysBloc extends LoadableHydratedBloc innerState?.showPastHolidays ?? false; + bool showDisclaimerOnEntry() => innerState?.showDisclaimer ?? false; List? getHolidays() => innerState?.holidays .where((element) => showPastHolidays() || DateTime.parse(element.end).isAfter(DateTime.now())) .toList() ?? []; diff --git a/lib/state/app/modules/holidays/view/holidays_view.dart b/lib/state/app/modules/holidays/view/holidays_view.dart index d0da804..41be1f3 100644 --- a/lib/state/app/modules/holidays/view/holidays_view.dart +++ b/lib/state/app/modules/holidays/view/holidays_view.dart @@ -6,6 +6,7 @@ import '../../../../../widget/list_view_util.dart'; import '../../../../../widget/centeredLeading.dart'; import '../../../../../widget/debug/debugTile.dart'; import '../../../../../widget/string_extensions.dart'; +import '../../../infrastructure/loadableState/loadable_state.dart'; import '../../../infrastructure/loadableState/view/loadable_state_consumer.dart'; import '../../../infrastructure/utilityWidgets/bloc_module.dart'; import '../bloc/holidays_bloc.dart'; @@ -16,7 +17,7 @@ class HolidaysView extends StatelessWidget { const HolidaysView({super.key}); @override - Widget build(BuildContext context) => BlocModule( + Widget build(BuildContext context) => BlocModule>( create: (context) => HolidaysBloc(), autoRebuild: true, child: (context, bloc, state) { @@ -28,10 +29,7 @@ class HolidaysView extends StatelessWidget { 'Ich übernehme weder Verantwortung für die Richtigkeit der Daten noch hafte ich für wirtschaftliche Schäden die aus der Verwendung dieser Daten entstehen können.\n\n' 'Die Daten stammen von https://ferien-api.de/'), actions: [ - TextButton(child: const Text('Okay'), onPressed: () { - bloc.add(DisclaimerDismissed()); - Navigator.of(context).pop(); - }), + TextButton(child: const Text('Okay'), onPressed: () => Navigator.of(context).pop()), ], )); } @@ -63,6 +61,10 @@ class HolidaysView extends StatelessWidget { ], ), body: LoadableStateConsumer( + onLoad: (state) { + if(state.showDisclaimer) showDisclaimer(); + bloc.add(DisclaimerDismissed()); + }, child: (state, loading) => ListViewUtil.fromList(bloc.getHolidays(), (holiday) { var holidayType = holiday.name.split(' ').first.capitalize(); String formatDate(String date) => Jiffy.parse(date).format(pattern: 'dd.MM.yyyy');