import '../../../infrastructure/utilityWidgets/loadableHydratedBloc/loadable_hydrated_bloc.dart'; import '../../../infrastructure/utilityWidgets/loadableHydratedBloc/loadable_hydrated_bloc_event.dart'; import '../repository/holidays_repository.dart'; import 'holidays_event.dart'; import 'holidays_state.dart'; class HolidaysBloc extends LoadableHydratedBloc<HolidaysEvent, HolidaysState, HolidaysRepository> { HolidaysBloc() { on<SetPastHolidaysVisible>((event, emit) { add(Emit((state) => state.copyWith(showPastHolidays: event.shouldBeVisible))); }); on<DisclaimerDismissed>((event, emit) => add( Emit((state) => state.copyWith(showDisclaimer: false)) )); } bool showPastHolidays() => innerState?.showPastHolidays ?? false; List<Holiday>? getHolidays() => innerState?.holidays .where((element) => showPastHolidays() || DateTime.parse(element.end).isAfter(DateTime.now())) .toList() ?? []; @override fromNothing() => const HolidaysState(showPastHolidays: false, holidays: [], showDisclaimer: true); @override fromStorage(Map<String, dynamic> json) => HolidaysState.fromJson(json); @override Future<void> gatherData() async { var holidays = await repo.getHolidays(); add(DataGathered((state) => state.copyWith(holidays: holidays))); } @override repository() => HolidaysRepository(); @override Map<String, dynamic>? toStorage(state) => state.toJson(); }