-
-
Notifications
You must be signed in to change notification settings - Fork 47
/
characters_inventory_tab_page.dart
70 lines (63 loc) · 2.89 KB
/
characters_inventory_tab_page.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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
import 'package:flutter/material.dart';
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/domain/extensions/string_extensions.dart';
import 'package:genshindb/presentation/characters/characters_page.dart';
import 'package:genshindb/presentation/characters/widgets/character_card.dart';
import 'package:genshindb/presentation/shared/app_fab.dart';
import 'package:genshindb/presentation/shared/loading.dart';
import 'package:genshindb/presentation/shared/mixins/app_fab_mixin.dart';
import 'package:genshindb/presentation/shared/utils/grid_utils.dart';
class CharactersInventoryTabPage extends StatefulWidget {
@override
_CharactersInventoryTabPageState createState() => _CharactersInventoryTabPageState();
}
class _CharactersInventoryTabPageState extends State<CharactersInventoryTabPage> with SingleTickerProviderStateMixin, AppFabMixin {
@override
bool get isInitiallyVisible => true;
@override
bool get hideOnTop => false;
@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(
onPressed: () => _openCharactersPage(context),
icon: const Icon(Icons.add),
hideFabAnimController: hideFabAnimController,
scrollController: scrollController,
mini: false,
),
body: BlocBuilder<InventoryBloc, InventoryState>(
builder: (ctx, state) => state.map(
loading: (_) => const Loading(useScaffold: false),
loaded: (state) => StaggeredGridView.countBuilder(
controller: scrollController,
crossAxisCount: GridUtils.getCrossAxisCountForGrids(context),
itemBuilder: (ctx, index) => CharacterCard.item(char: state.characters[index]),
itemCount: state.characters.length,
crossAxisSpacing: isPortrait ? 10 : 5,
mainAxisSpacing: 5,
staggeredTileBuilder: (int index) => const StaggeredTile.fit(1),
),
),
),
),
);
}
Future<void> _openCharactersPage(BuildContext context) async {
final inventoryBloc = context.read<InventoryBloc>();
final charactersBloc = context.read<CharactersBloc>();
charactersBloc.add(CharactersEvent.init(excludeKeys: inventoryBloc.getItemsKeysToExclude()));
final route = MaterialPageRoute<String>(builder: (_) => const CharactersPage(isInSelectionMode: true));
final keyName = await Navigator.push(context, route);
charactersBloc.add(const CharactersEvent.init());
if (keyName.isNullEmptyOrWhitespace) {
return;
}
inventoryBloc.add(InventoryEvent.addCharacter(key: keyName!));
}
}