Skip to content

Commit

Permalink
Improvements while closing or popping a bloc
Browse files Browse the repository at this point in the history
  • Loading branch information
Wolfteam committed Mar 27, 2021
1 parent 8fdbf70 commit f1def97
Show file tree
Hide file tree
Showing 16 changed files with 85 additions and 29 deletions.
Expand Up @@ -14,6 +14,8 @@ part 'calculator_asc_materials_bloc.freezed.dart';
part 'calculator_asc_materials_event.dart';
part 'calculator_asc_materials_state.dart';

const _initialState = CalculatorAscMaterialsState.initial(items: [], summary: []);

class CalculatorAscMaterialsBloc extends Bloc<CalculatorAscMaterialsEvent, CalculatorAscMaterialsState> {
final GenshinService _genshinService;
final TelemetryService _telemetryService;
Expand All @@ -30,7 +32,7 @@ class CalculatorAscMaterialsBloc extends Bloc<CalculatorAscMaterialsEvent, Calcu
this._calculatorService,
this._dataService,
this._calculatorAscMaterialsSessionsBloc,
) : super(const CalculatorAscMaterialsState.initial(items: [], summary: []));
) : super(_initialState);

@override
Stream<CalculatorAscMaterialsState> mapEventToState(
Expand Down Expand Up @@ -159,6 +161,7 @@ class CalculatorAscMaterialsBloc extends Bloc<CalculatorAscMaterialsEvent, Calcu

return _updateItem(e.sessionKey, e.index, updatedWeapon);
},
close: (e) async => _initialState,
);

yield s;
Expand Down
Expand Up @@ -54,4 +54,6 @@ abstract class CalculatorAscMaterialsEvent with _$CalculatorAscMaterialsEvent {
@required int sessionKey,
@required int index,
}) = _RemoveItem;

const factory CalculatorAscMaterialsEvent.close() = _Close;
}
Expand Up @@ -22,31 +22,31 @@ class CalculatorAscMaterialsSessionsBloc extends Bloc<CalculatorAscMaterialsSess
@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);
},
);
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;
}
Expand Down
Expand Up @@ -16,4 +16,6 @@ abstract class CalculatorAscMaterialsSessionsEvent implements _$CalculatorAscMat
const factory CalculatorAscMaterialsSessionsEvent.deleteSession({
@required int key,
}) = _DeleteSession;

const factory CalculatorAscMaterialsSessionsEvent.close() = _Close;
}
1 change: 1 addition & 0 deletions lib/application/materials/materials_bloc.dart
Expand Up @@ -48,6 +48,7 @@ class MaterialsBloc extends Bloc<MaterialsEvent, MaterialsState> {
tempSortDirectionType: currentState.sortDirectionType,
tempType: currentState.type,
),
close: (e) => currentState.copyWith.call(materials: []),
);

yield s;
Expand Down
2 changes: 2 additions & 0 deletions lib/application/materials/materials_event.dart
Expand Up @@ -14,4 +14,6 @@ abstract class MaterialsEvent implements _$MaterialsEvent {
const factory MaterialsEvent.sortDirectionTypeChanged(SortDirectionType sortDirectionType) = _SortDirectionTypeChanged;

const factory MaterialsEvent.cancelChanges() = _CancelChanges;

const factory MaterialsEvent.close() = _Close;
}
Expand Up @@ -89,5 +89,7 @@ class SessionListItem extends StatelessWidget {
context.read<CalculatorAscMaterialsBloc>().add(CalculatorAscMaterialsEvent.init(sessionKey: session.key));
final route = MaterialPageRoute(builder: (c) => CalculatorAscensionMaterialsPage(sessionKey: session.key));
await Navigator.push(context, route);
await route.completed;
context.read<CalculatorAscMaterialsBloc>().add(const CalculatorAscMaterialsEvent.close());
}
}
1 change: 1 addition & 0 deletions lib/presentation/characters/widgets/character_card.dart
Expand Up @@ -155,6 +155,7 @@ class CharacterCard extends StatelessWidget {
bloc.add(CharacterEvent.loadFromName(key: keyName));
final route = MaterialPageRoute(builder: (c) => const CharacterPage());
await Navigator.push(context, route);
await route.completed;
bloc.pop();
}
}
2 changes: 2 additions & 0 deletions lib/presentation/home/widgets/sliver_calculators_card.dart
Expand Up @@ -28,5 +28,7 @@ class SliverCalculatorsCard extends StatelessWidget {
context.read<CalculatorAscMaterialsSessionsBloc>().add(const CalculatorAscMaterialsSessionsEvent.init());
final route = MaterialPageRoute(builder: (c) => CalculatorSessionsPage());
await Navigator.push(context, route);
await route.completed;
context.read<CalculatorAscMaterialsSessionsBloc>().add(const CalculatorAscMaterialsSessionsEvent.close());
}
}
5 changes: 4 additions & 1 deletion lib/presentation/home/widgets/sliver_materials_card.dart
Expand Up @@ -28,6 +28,9 @@ class SliverMaterialsCard extends StatelessWidget {

Future<void> _gotoMaterialsPage(BuildContext context) async {
context.read<MaterialsBloc>().add(const MaterialsEvent.init());
await Navigator.push(context, MaterialPageRoute(builder: (_) => const MaterialsPage()));
final route = MaterialPageRoute(builder: (_) => const MaterialsPage());
await Navigator.push(context, route);
await route.completed;
context.read<MaterialsBloc>().add(const MaterialsEvent.close());
}
}
Expand Up @@ -29,5 +29,6 @@ Future<void> _goToInventoryPage(BuildContext context) async {
context.read<InventoryBloc>().add(const InventoryEvent.init());
final route = MaterialPageRoute(builder: (c) => InventoryPage());
await Navigator.push(context, route);
await route.completed;
context.read<InventoryBloc>().add(const InventoryEvent.close());
}
Expand Up @@ -3,19 +3,47 @@ import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:flutter_staggered_grid_view/flutter_staggered_grid_view.dart';
import 'package:genshindb/application/bloc.dart';
import 'package:genshindb/presentation/materials/widgets/material_card.dart';
import 'package:genshindb/presentation/shared/app_fab.dart';
import 'package:genshindb/presentation/shared/extensions/scroll_controller_extensions.dart';
import 'package:genshindb/presentation/shared/loading.dart';

class MaterialsInventoryTabPage extends StatelessWidget {
class MaterialsInventoryTabPage extends StatefulWidget {
@override
_MaterialsInventoryTabPageState createState() => _MaterialsInventoryTabPageState();
}

class _MaterialsInventoryTabPageState extends State<MaterialsInventoryTabPage> with SingleTickerProviderStateMixin {
ScrollController _scrollController;
AnimationController _hideFabAnimController;

@override
void initState() {
super.initState();

_scrollController = ScrollController();
_hideFabAnimController = AnimationController(
vsync: this,
duration: kThemeAnimationDuration,
value: 0, // initially not visible
);
_scrollController.addListener(() => _scrollController.handleScrollForFab(_hideFabAnimController));
}

@override
Widget build(BuildContext context) {
final isPortrait = MediaQuery.of(context).orientation == Orientation.portrait;
return Padding(
padding: const EdgeInsets.symmetric(horizontal: 5),
child: Scaffold(
floatingActionButton: AppFab(
scrollController: _scrollController,
hideFabAnimController: _hideFabAnimController,
),
body: BlocBuilder<InventoryBloc, InventoryState>(
builder: (ctx, state) => state.map(
loading: (_) => const Loading(useScaffold: false),
loaded: (state) => StaggeredGridView.countBuilder(
controller: _scrollController,
crossAxisCount: isPortrait ? 3 : 5,
itemBuilder: (ctx, index) => MaterialCard.quantity(item: state.materials[index]),
itemCount: state.materials.length,
Expand All @@ -28,4 +56,11 @@ class MaterialsInventoryTabPage extends StatelessWidget {
),
);
}

@override
void dispose() {
_scrollController.dispose();
_hideFabAnimController.dispose();
super.dispose();
}
}
1 change: 0 additions & 1 deletion lib/presentation/main_tab_page.dart
Expand Up @@ -51,7 +51,6 @@ class _MainTabPageState extends State<MainTabPage> with SingleTickerProviderStat
context.read<ElementsBloc>().add(const ElementsEvent.init());
context.read<SettingsBloc>().add(const SettingsEvent.init());
context.read<GameCodesBloc>().add(const GameCodesEvent.init());
context.read<MaterialsBloc>().add(const MaterialsEvent.init());
}

@override
Expand Down
1 change: 1 addition & 0 deletions lib/presentation/shared/circle_character.dart
Expand Up @@ -43,6 +43,7 @@ class CircleCharacter extends StatelessWidget {
bloc.add(CharacterEvent.loadFromImg(image: image));
final route = MaterialPageRoute(builder: (c) => const CharacterPage());
await Navigator.push(context, route);
await route.completed;
bloc.pop();
}
}
1 change: 1 addition & 0 deletions lib/presentation/shared/circle_weapon.dart
Expand Up @@ -40,6 +40,7 @@ class CircleWeapon extends StatelessWidget {
bloc.add(WeaponEvent.loadFromImg(image: image));
final route = MaterialPageRoute(builder: (c) => WeaponPage());
await Navigator.push(context, route);
await route.completed;
bloc.pop();
}
}
1 change: 1 addition & 0 deletions lib/presentation/weapons/widgets/weapon_card.dart
Expand Up @@ -192,6 +192,7 @@ class WeaponCard extends StatelessWidget {
bloc.add(WeaponEvent.loadFromName(key: keyName));
final route = MaterialPageRoute(builder: (c) => WeaponPage());
await Navigator.push(context, route);
await route.completed;
bloc.pop();
}
}

0 comments on commit f1def97

Please sign in to comment.