-
-
Notifications
You must be signed in to change notification settings - Fork 47
/
calculator_asc_materials_sessions_bloc.dart
53 lines (46 loc) · 2.54 KB
/
calculator_asc_materials_sessions_bloc.dart
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
import 'dart:async';
import 'package:bloc/bloc.dart';
import 'package:freezed_annotation/freezed_annotation.dart';
import 'package:genshindb/domain/models/models.dart';
import 'package:genshindb/domain/services/data_service.dart';
import 'package:genshindb/domain/services/telemetry_service.dart';
import 'package:meta/meta.dart';
part 'calculator_asc_materials_sessions_bloc.freezed.dart';
part 'calculator_asc_materials_sessions_event.dart';
part 'calculator_asc_materials_sessions_state.dart';
class CalculatorAscMaterialsSessionsBloc extends Bloc<CalculatorAscMaterialsSessionsEvent, CalculatorAscMaterialsSessionsState> {
final DataService _dataService;
final TelemetryService _telemetryService;
_LoadedState get currentState => state as _LoadedState;
CalculatorAscMaterialsSessionsBloc(this._dataService, this._telemetryService) : super(const CalculatorAscMaterialsSessionsState.loading());
@override
Stream<CalculatorAscMaterialsSessionsState> mapEventToState(CalculatorAscMaterialsSessionsEvent event) async* {
final s = await event.map(
init: (_) async {
await _telemetryService.trackCalculatorAscMaterialsSessionsLoaded();
final sessions = _dataService.getAllCalAscMatSessions();
return CalculatorAscMaterialsSessionsState.loaded(sessions: sessions);
},
createSession: (e) async {
await _telemetryService.trackCalculatorAscMaterialsSessionsCreated();
await _dataService.createCalAscMatSession(e.name.trim(), currentState.sessions.length);
final sessions = _dataService.getAllCalAscMatSessions();
return CalculatorAscMaterialsSessionsState.loaded(sessions: sessions);
},
updateSession: (e) async {
final position = currentState.sessions.firstWhere((el) => el.key == e.key).position;
await _telemetryService.trackCalculatorAscMaterialsSessionsUpdated();
await _dataService.updateCalAscMatSession(e.key, e.name.trim(), position);
final sessions = _dataService.getAllCalAscMatSessions();
return CalculatorAscMaterialsSessionsState.loaded(sessions: sessions);
},
deleteSession: (e) async {
await _telemetryService.trackCalculatorAscMaterialsSessionsDeleted();
await _dataService.deleteCalAscMatSession(e.key);
final sessions = _dataService.getAllCalAscMatSessions();
return CalculatorAscMaterialsSessionsState.loaded(sessions: sessions);
},
close: (e) async => const CalculatorAscMaterialsSessionsState.loaded(sessions: []));
yield s;
}
}