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