diff --git a/lib/application/bloc.dart b/lib/application/bloc.dart index c8d9e2634..ea343bf7c 100644 --- a/lib/application/bloc.dart +++ b/lib/application/bloc.dart @@ -20,6 +20,7 @@ export 'game_codes/game_codes_bloc.dart'; export 'home/home_bloc.dart'; export 'inventory/inventory_bloc.dart'; export 'item_quantity_form/item_quantity_form_bloc.dart'; +export 'item_release_history/item_release_history_bloc.dart'; export 'main/main_bloc.dart'; export 'main_tab/main_tab_bloc.dart'; export 'material/material_bloc.dart'; diff --git a/lib/application/item_release_history/item_release_history_bloc.dart b/lib/application/item_release_history/item_release_history_bloc.dart new file mode 100644 index 000000000..81bfc5de5 --- /dev/null +++ b/lib/application/item_release_history/item_release_history_bloc.dart @@ -0,0 +1,29 @@ +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 'item_release_history_bloc.freezed.dart'; +part 'item_release_history_event.dart'; +part 'item_release_history_state.dart'; + +class ItemReleaseHistoryBloc extends Bloc { + final GenshinService _genshinService; + final TelemetryService _telemetryService; + + ItemReleaseHistoryBloc(this._genshinService, this._telemetryService) : super(const ItemReleaseHistoryState.loading()); + + @override + Stream mapEventToState(ItemReleaseHistoryEvent event) async* { + final s = await event.map( + init: (e) async { + await _telemetryService.trackItemReleaseHistoryOpened(e.itemKey); + final history = _genshinService.getItemReleaseHistory(e.itemKey); + return ItemReleaseHistoryState.initial(itemKey: e.itemKey, history: history); + }, + ); + + yield s; + } +} diff --git a/lib/application/item_release_history/item_release_history_event.dart b/lib/application/item_release_history/item_release_history_event.dart new file mode 100644 index 000000000..d3f1dc89c --- /dev/null +++ b/lib/application/item_release_history/item_release_history_event.dart @@ -0,0 +1,6 @@ +part of 'item_release_history_bloc.dart'; + +@freezed +class ItemReleaseHistoryEvent with _$ItemReleaseHistoryEvent { + const factory ItemReleaseHistoryEvent.init({required String itemKey}) = _Init; +} diff --git a/lib/application/item_release_history/item_release_history_state.dart b/lib/application/item_release_history/item_release_history_state.dart new file mode 100644 index 000000000..a60352170 --- /dev/null +++ b/lib/application/item_release_history/item_release_history_state.dart @@ -0,0 +1,11 @@ +part of 'item_release_history_bloc.dart'; + +@freezed +class ItemReleaseHistoryState with _$ItemReleaseHistoryState { + const factory ItemReleaseHistoryState.loading() = _Loading; + + const factory ItemReleaseHistoryState.initial({ + required String itemKey, + required List history, + }) = _InitialState; +}