Skip to content

Commit

Permalink
[Application] Added a bloc that will be used on the gender chart
Browse files Browse the repository at this point in the history
  • Loading branch information
Wolfteam committed May 23, 2022
1 parent 9ea4bae commit e3c58a3
Show file tree
Hide file tree
Showing 7 changed files with 99 additions and 0 deletions.
2 changes: 2 additions & 0 deletions lib/application/bloc.dart
Expand Up @@ -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';
Expand Down
@@ -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<CharactersPerRegionGenderEvent, CharactersPerRegionGenderState> {
final GenshinService _genshinService;

CharactersPerRegionGenderBloc(this._genshinService) : super(const CharactersPerRegionGenderState.loading());

@override
Stream<CharactersPerRegionGenderState> 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);
}
}
@@ -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;
}
@@ -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<ItemCommonWithName> items,
}) = _LoadedState;
}
31 changes: 31 additions & 0 deletions 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<ChartGendersEvent, ChartGendersState> {
final GenshinService _genshinService;

ChartGendersBloc(this._genshinService) : super(const ChartGendersState.loading());

@override
Stream<ChartGendersState> mapEventToState(ChartGendersEvent event) async* {
final s = event.map(
init: (_) => _init(),
);

yield s;
}

ChartGendersState _init() {
final items = _genshinService.getCharacterGendersForCharts();
final maxCount = max<int>(items.map((e) => e.femaleCount).reduce(max), items.map((e) => e.maleCount).reduce(max));
return ChartGendersState.loaded(genders: items, maxCount: maxCount);
}
}
6 changes: 6 additions & 0 deletions 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;
}
11 changes: 11 additions & 0 deletions 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<ChartGenderModel> genders,
}) = _LoadedState;
}

0 comments on commit e3c58a3

Please sign in to comment.