Skip to content

Commit

Permalink
Added initial material_bloc.dart
Browse files Browse the repository at this point in the history
  • Loading branch information
Wolfteam committed Mar 16, 2021
1 parent e75afdb commit aae5ac4
Show file tree
Hide file tree
Showing 5 changed files with 107 additions and 0 deletions.
1 change: 1 addition & 0 deletions lib/application/bloc.dart
Expand Up @@ -9,6 +9,7 @@ export 'game_codes/game_codes_bloc.dart';
export 'home/home_bloc.dart';
export 'main/main_bloc.dart';
export 'main_tab/main_tab_bloc.dart';
export 'material/material_bloc.dart';
export 'materials/materials_bloc.dart';
export 'settings/settings_bloc.dart';
export 'tierlist/tier_list_bloc.dart';
Expand Down
67 changes: 67 additions & 0 deletions lib/application/material/material_bloc.dart
@@ -0,0 +1,67 @@
import 'dart:async';

import 'package:flutter/cupertino.dart';
import 'package:freezed_annotation/freezed_annotation.dart';
import 'package:genshindb/application/common/pop_bloc.dart';
import 'package:genshindb/domain/enums/enums.dart';
import 'package:genshindb/domain/models/models.dart';
import 'package:genshindb/domain/services/genshin_service.dart';
import 'package:genshindb/domain/services/telemetry_service.dart';
import 'package:meta/meta.dart';

part 'material_bloc.freezed.dart';
part 'material_event.dart';
part 'material_state.dart';

class MaterialBloc extends PopBloc<MaterialEvent, MaterialState> {
final GenshinService _genshinService;
final TelemetryService _telemetryService;

MaterialBloc(this._genshinService, this._telemetryService) : super(const MaterialState.loading());

@override
MaterialEvent getEventForPop(String key) => MaterialEvent.loadFromName(key: key, addToQueue: false);

@override
Stream<MaterialState> mapEventToState(MaterialEvent event) async* {
final s = await event.map(
loadFromName: (e) async {
final material = _genshinService.getMaterial(e.key);
if (e.addToQueue) {
await _telemetryService.trackMaterialLoaded(e.key);
currentItemsInStack.add(material.key);
}
return _buildInitialState(material);
},
loadFromImg: (e) async {
final material = _genshinService.getMaterialByImage(e.image);
if (e.addToQueue) {
await _telemetryService.trackMaterialLoaded(material.image, loadedFromName: false);
currentItemsInStack.add(material.key);
}
return _buildInitialState(material);
},
);

yield s;
}

MaterialState _buildInitialState(MaterialFileModel material) {
final translation = _genshinService.getMaterialTranslation(material.key);
final charImgs = _genshinService.getCharacterImgsUsingMaterial(material.key);
final weaponImgs = _genshinService.getWeaponImgsUsingMaterial(material.key);
final relatedMaterials = _genshinService.getRelatedMaterialImgsToMaterial(material.key);
return MaterialState.loaded(
name: translation.name,
fullImage: material.fullImagePath,
rarity: material.rarity,
type: material.type,
description: translation.description,
charImages: charImgs,
weaponImages: weaponImgs,
days: material.days,
obtainedFrom: material.obtainedFrom,
relatedMaterials: relatedMaterials,
);
}
}
14 changes: 14 additions & 0 deletions lib/application/material/material_event.dart
@@ -0,0 +1,14 @@
part of 'material_bloc.dart';

@freezed
abstract class MaterialEvent implements _$MaterialEvent {
const factory MaterialEvent.loadFromName({
@required String key,
@Default(true) bool addToQueue,
}) = _LoadMaterialFromName;

const factory MaterialEvent.loadFromImg({
@required String image,
@Default(true) bool addToQueue,
}) = _LoadMaterialFromImg;
}
18 changes: 18 additions & 0 deletions lib/application/material/material_state.dart
@@ -0,0 +1,18 @@
part of 'material_bloc.dart';

@freezed
abstract class MaterialState implements _$MaterialState {
const factory MaterialState.loading() = _LoadingState;
const factory MaterialState.loaded({
@required String name,
@required String fullImage,
@required int rarity,
@required MaterialType type,
String description,
@required List<String> charImages,
@required List<String> weaponImages,
@required List<int> days,
@required List<ObtainedFromFileModel> obtainedFrom,
@required List<String> relatedMaterials,
}) = _LoadedState;
}
7 changes: 7 additions & 0 deletions lib/main.dart
Expand Up @@ -155,6 +155,13 @@ class MyApp extends StatelessWidget {
return MaterialsBloc(genshinService);
},
),
BlocProvider(
create: (_) {
final genshinService = getIt<GenshinService>();
final telemetryService = getIt<TelemetryService>();
return MaterialBloc(genshinService, telemetryService);
},
),
],
child: BlocBuilder<MainBloc, MainState>(
builder: (ctx, state) => AppWidget(),
Expand Down

0 comments on commit aae5ac4

Please sign in to comment.