diff --git a/lib/application/birthdays_per_month/birthdays_per_month_bloc.dart b/lib/application/birthdays_per_month/birthdays_per_month_bloc.dart new file mode 100644 index 000000000..174819261 --- /dev/null +++ b/lib/application/birthdays_per_month/birthdays_per_month_bloc.dart @@ -0,0 +1,30 @@ +import 'package:bloc/bloc.dart'; +import 'package:freezed_annotation/freezed_annotation.dart'; +import 'package:shiori/domain/models/models.dart'; +import 'package:shiori/domain/services/genshin_service.dart'; +import 'package:shiori/domain/services/telemetry_service.dart'; + +part 'birthdays_per_month_bloc.freezed.dart'; +part 'birthdays_per_month_event.dart'; +part 'birthdays_per_month_state.dart'; + +class BirthdaysPerMonthBloc extends Bloc { + final GenshinService _genshinService; + final TelemetryService _telemetryService; + + BirthdaysPerMonthBloc(this._genshinService, this._telemetryService) : super(const BirthdaysPerMonthState.loading()); + + @override + Stream mapEventToState(BirthdaysPerMonthEvent event) async* { + final s = await event.map( + init: (e) => _init(e.month), + ); + yield s; + } + + Future _init(int month) async { + await _telemetryService.trackBirthdaysPerMonthOpened(month); + final characters = _genshinService.getCharacterBirthdays(month: month); + return BirthdaysPerMonthState.loaded(month: month, characters: characters); + } +} diff --git a/lib/application/birthdays_per_month/birthdays_per_month_event.dart b/lib/application/birthdays_per_month/birthdays_per_month_event.dart new file mode 100644 index 000000000..fbc9d4e5c --- /dev/null +++ b/lib/application/birthdays_per_month/birthdays_per_month_event.dart @@ -0,0 +1,8 @@ +part of 'birthdays_per_month_bloc.dart'; + +@freezed +class BirthdaysPerMonthEvent with _$BirthdaysPerMonthEvent { + const factory BirthdaysPerMonthEvent.init({ + required int month, + }) = _BirthdaysPerMonthEvent; +} diff --git a/lib/application/birthdays_per_month/birthdays_per_month_state.dart b/lib/application/birthdays_per_month/birthdays_per_month_state.dart new file mode 100644 index 000000000..aa4f6c370 --- /dev/null +++ b/lib/application/birthdays_per_month/birthdays_per_month_state.dart @@ -0,0 +1,11 @@ +part of 'birthdays_per_month_bloc.dart'; + +@freezed +class BirthdaysPerMonthState with _$BirthdaysPerMonthState { + const factory BirthdaysPerMonthState.loading() = _LoadingState; + + const factory BirthdaysPerMonthState.loaded({ + required int month, + required List characters, + }) = _LoadedState; +} diff --git a/lib/application/bloc.dart b/lib/application/bloc.dart index 99a0cd2cd..b8d21a5d6 100644 --- a/lib/application/bloc.dart +++ b/lib/application/bloc.dart @@ -2,6 +2,7 @@ export 'artifact/artifact_bloc.dart'; export 'artifacts/artifacts_bloc.dart'; export 'banner_history/banner_history_bloc.dart'; export 'banner_history_item/banner_history_item_bloc.dart'; +export 'birthdays_per_month/birthdays_per_month_bloc.dart'; export 'calculator_asc_materials/material_item/calculator_asc_materials_item_bloc.dart'; export 'calculator_asc_materials/material_item_quantity/calculator_asc_materials_item_update_quantity_bloc.dart'; export 'calculator_asc_materials/materials/calculator_asc_materials_bloc.dart';