Skip to content

Commit

Permalink
[Application] Added initials blocs for the characters per region chart
Browse files Browse the repository at this point in the history
  • Loading branch information
Wolfteam committed May 23, 2022
1 parent 8e8a692 commit 5946d1e
Show file tree
Hide file tree
Showing 7 changed files with 97 additions and 0 deletions.
2 changes: 2 additions & 0 deletions lib/application/bloc.dart
Expand Up @@ -13,10 +13,12 @@ export 'calculator_asc_materials/sessions_order/calculator_asc_materials_session
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 '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/regions/chart_regions_bloc.dart';
export 'charts/tops/chart_tops_bloc.dart';
export 'custom_build/custom_build_bloc.dart';
export 'custom_builds/custom_builds_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_bloc.freezed.dart';
part 'characters_per_region_event.dart';
part 'characters_per_region_state.dart';

class CharactersPerRegionBloc extends Bloc<CharactersPerRegionEvent, CharactersPerRegionState> {
final GenshinService _genshinService;

CharactersPerRegionBloc(this._genshinService) : super(const CharactersPerRegionState.loading());

@override
Stream<CharactersPerRegionState> mapEventToState(CharactersPerRegionEvent event) async* {
final s = event.map(
init: (e) => _init(e.type),
);
yield s;
}

CharactersPerRegionState _init(RegionType type) {
final characters = _genshinService.getCharactersForItemsByRegion(type);
return CharactersPerRegionState.loaded(regionType: type, items: characters);
}
}
@@ -0,0 +1,8 @@
part of 'characters_per_region_bloc.dart';

@freezed
class CharactersPerRegionEvent with _$CharactersPerRegionEvent {
const factory CharactersPerRegionEvent.init({
required RegionType type,
}) = _Init;
}
@@ -0,0 +1,11 @@
part of 'characters_per_region_bloc.dart';

@freezed
class CharactersPerRegionState with _$CharactersPerRegionState {
const factory CharactersPerRegionState.loading() = _LoadingState;

const factory CharactersPerRegionState.loaded({
required RegionType regionType,
required List<ItemCommonWithName> items,
}) = _LoadedState;
}
31 changes: 31 additions & 0 deletions lib/application/charts/regions/chart_regions_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_regions_bloc.freezed.dart';
part 'chart_regions_event.dart';
part 'chart_regions_state.dart';

class ChartRegionsBloc extends Bloc<ChartRegionsEvent, ChartRegionsState> {
final GenshinService _genshinService;

ChartRegionsBloc(this._genshinService) : super(const ChartRegionsState.loading());

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

yield s;
}

ChartRegionsState _init() {
final items = _genshinService.getCharacterRegionsForCharts();
final maxCount = items.map((e) => e.quantity).reduce(max);
return ChartRegionsState.loaded(maxCount: maxCount, items: items);
}
}
6 changes: 6 additions & 0 deletions lib/application/charts/regions/chart_regions_event.dart
@@ -0,0 +1,6 @@
part of 'chart_regions_bloc.dart';

@freezed
class ChartRegionsEvent with _$ChartRegionsEvent {
const factory ChartRegionsEvent.init() = _Init;
}
11 changes: 11 additions & 0 deletions lib/application/charts/regions/chart_regions_state.dart
@@ -0,0 +1,11 @@
part of 'chart_regions_bloc.dart';

@freezed
class ChartRegionsState with _$ChartRegionsState {
const factory ChartRegionsState.loading() = _LoadingState;

const factory ChartRegionsState.loaded({
required int maxCount,
required List<ChartCharacterRegionModel> items,
}) = _LoadedState;
}

0 comments on commit 5946d1e

Please sign in to comment.