From e3c58a334083e2127724a35363ae2c1fedccd3b3 Mon Sep 17 00:00:00 2001 From: Efrain Date: Mon, 23 May 2022 14:48:49 -0500 Subject: [PATCH] [Application] Added a bloc that will be used on the gender chart --- lib/application/bloc.dart | 2 ++ .../characters_per_region_gender_bloc.dart | 28 +++++++++++++++++ .../characters_per_region_gender_event.dart | 9 ++++++ .../characters_per_region_gender_state.dart | 12 +++++++ .../charts/genders/chart_genders_bloc.dart | 31 +++++++++++++++++++ .../charts/genders/chart_genders_event.dart | 6 ++++ .../charts/genders/chart_genders_state.dart | 11 +++++++ 7 files changed, 99 insertions(+) create mode 100644 lib/application/characters_per_region_gender/characters_per_region_gender_bloc.dart create mode 100644 lib/application/characters_per_region_gender/characters_per_region_gender_event.dart create mode 100644 lib/application/characters_per_region_gender/characters_per_region_gender_state.dart create mode 100644 lib/application/charts/genders/chart_genders_bloc.dart create mode 100644 lib/application/charts/genders/chart_genders_event.dart create mode 100644 lib/application/charts/genders/chart_genders_state.dart diff --git a/lib/application/bloc.dart b/lib/application/bloc.dart index 98f2be516..3a1151768 100644 --- a/lib/application/bloc.dart +++ b/lib/application/bloc.dart @@ -14,10 +14,12 @@ export 'changelog/changelog_bloc.dart'; export 'character/character_bloc.dart'; export 'characters/characters_bloc.dart'; export 'characters_per_region/characters_per_region_bloc.dart'; +export 'characters_per_region_gender/characters_per_region_gender_bloc.dart'; export 'charts/ascension_stats/chart_ascension_stats_bloc.dart'; export 'charts/birthdays/chart_birthdays_bloc.dart'; export 'charts/elements/chart_elements_bloc.dart'; export 'charts/elements/chart_elements_bloc.dart'; +export 'charts/genders/chart_genders_bloc.dart'; export 'charts/regions/chart_regions_bloc.dart'; export 'charts/tops/chart_tops_bloc.dart'; export 'custom_build/custom_build_bloc.dart'; diff --git a/lib/application/characters_per_region_gender/characters_per_region_gender_bloc.dart b/lib/application/characters_per_region_gender/characters_per_region_gender_bloc.dart new file mode 100644 index 000000000..dd2569393 --- /dev/null +++ b/lib/application/characters_per_region_gender/characters_per_region_gender_bloc.dart @@ -0,0 +1,28 @@ +import 'package:bloc/bloc.dart'; +import 'package:freezed_annotation/freezed_annotation.dart'; +import 'package:shiori/domain/enums/enums.dart'; +import 'package:shiori/domain/models/models.dart'; +import 'package:shiori/domain/services/genshin_service.dart'; + +part 'characters_per_region_gender_bloc.freezed.dart'; +part 'characters_per_region_gender_event.dart'; +part 'characters_per_region_gender_state.dart'; + +class CharactersPerRegionGenderBloc extends Bloc { + final GenshinService _genshinService; + + CharactersPerRegionGenderBloc(this._genshinService) : super(const CharactersPerRegionGenderState.loading()); + + @override + Stream mapEventToState(CharactersPerRegionGenderEvent event) async* { + final s = event.map( + init: (e) => _init(e.regionType, e.onlyFemales), + ); + yield s; + } + + CharactersPerRegionGenderState _init(RegionType regionType, bool onlyFemales) { + final characters = _genshinService.getCharactersForItemsByRegionAndGender(regionType, onlyFemales); + return CharactersPerRegionGenderState.loaded(regionType: regionType, onlyFemales: onlyFemales, items: characters); + } +} diff --git a/lib/application/characters_per_region_gender/characters_per_region_gender_event.dart b/lib/application/characters_per_region_gender/characters_per_region_gender_event.dart new file mode 100644 index 000000000..8fd98679b --- /dev/null +++ b/lib/application/characters_per_region_gender/characters_per_region_gender_event.dart @@ -0,0 +1,9 @@ +part of 'characters_per_region_gender_bloc.dart'; + +@freezed +class CharactersPerRegionGenderEvent with _$CharactersPerRegionGenderEvent { + const factory CharactersPerRegionGenderEvent.init({ + required RegionType regionType, + required bool onlyFemales, + }) = _Init; +} diff --git a/lib/application/characters_per_region_gender/characters_per_region_gender_state.dart b/lib/application/characters_per_region_gender/characters_per_region_gender_state.dart new file mode 100644 index 000000000..616fed9c9 --- /dev/null +++ b/lib/application/characters_per_region_gender/characters_per_region_gender_state.dart @@ -0,0 +1,12 @@ +part of 'characters_per_region_gender_bloc.dart'; + +@freezed +class CharactersPerRegionGenderState with _$CharactersPerRegionGenderState { + const factory CharactersPerRegionGenderState.loading() = _LoadingState; + + const factory CharactersPerRegionGenderState.loaded({ + required RegionType regionType, + required bool onlyFemales, + required List items, + }) = _LoadedState; +} diff --git a/lib/application/charts/genders/chart_genders_bloc.dart b/lib/application/charts/genders/chart_genders_bloc.dart new file mode 100644 index 000000000..1ee429114 --- /dev/null +++ b/lib/application/charts/genders/chart_genders_bloc.dart @@ -0,0 +1,31 @@ +import 'dart:math'; + +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'; + +part 'chart_genders_bloc.freezed.dart'; +part 'chart_genders_event.dart'; +part 'chart_genders_state.dart'; + +class ChartGendersBloc extends Bloc { + final GenshinService _genshinService; + + ChartGendersBloc(this._genshinService) : super(const ChartGendersState.loading()); + + @override + Stream mapEventToState(ChartGendersEvent event) async* { + final s = event.map( + init: (_) => _init(), + ); + + yield s; + } + + ChartGendersState _init() { + final items = _genshinService.getCharacterGendersForCharts(); + final maxCount = max(items.map((e) => e.femaleCount).reduce(max), items.map((e) => e.maleCount).reduce(max)); + return ChartGendersState.loaded(genders: items, maxCount: maxCount); + } +} diff --git a/lib/application/charts/genders/chart_genders_event.dart b/lib/application/charts/genders/chart_genders_event.dart new file mode 100644 index 000000000..186c08933 --- /dev/null +++ b/lib/application/charts/genders/chart_genders_event.dart @@ -0,0 +1,6 @@ +part of 'chart_genders_bloc.dart'; + +@freezed +class ChartGendersEvent with _$ChartGendersEvent { + const factory ChartGendersEvent.init() = _Init; +} diff --git a/lib/application/charts/genders/chart_genders_state.dart b/lib/application/charts/genders/chart_genders_state.dart new file mode 100644 index 000000000..6704b9409 --- /dev/null +++ b/lib/application/charts/genders/chart_genders_state.dart @@ -0,0 +1,11 @@ +part of 'chart_genders_bloc.dart'; + +@freezed +class ChartGendersState with _$ChartGendersState { + const factory ChartGendersState.loading() = _LoadingState; + + const factory ChartGendersState.loaded({ + required int maxCount, + required List genders, + }) = _LoadedState; +}