-
-
Notifications
You must be signed in to change notification settings - Fork 47
/
character_bottom_sheet.dart
125 lines (123 loc) · 5.99 KB
/
character_bottom_sheet.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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:genshindb/application/bloc.dart';
import 'package:genshindb/domain/enums/enums.dart';
import 'package:genshindb/generated/l10n.dart';
import 'package:genshindb/presentation/shared/common_bottom_sheet.dart';
import 'package:genshindb/presentation/shared/elements_button_bar.dart';
import 'package:genshindb/presentation/shared/extensions/i18n_extensions.dart';
import 'package:genshindb/presentation/shared/genshin_db_icons.dart';
import 'package:genshindb/presentation/shared/item_popupmenu_filter.dart';
import 'package:genshindb/presentation/shared/loading.dart';
import 'package:genshindb/presentation/shared/rarity_rating.dart';
import 'package:genshindb/presentation/shared/sort_direction_popupmenu_filter.dart';
import 'package:genshindb/presentation/shared/styles.dart';
import 'package:genshindb/presentation/shared/weapons_button_bar.dart';
class CharacterBottomSheet extends StatelessWidget {
const CharacterBottomSheet({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
final s = S.of(context);
final theme = Theme.of(context);
return CommonBottomSheet(
titleIcon: GenshinDb.filter,
title: s.filters,
showCancelButton: false,
showOkButton: false,
child: BlocBuilder<CharactersBloc, CharactersState>(
builder: (context, state) => state.map(
loading: (_) => const Loading(useScaffold: false),
loaded: (state) => Column(
crossAxisAlignment: CrossAxisAlignment.stretch,
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [
Text(s.elements),
ElementsButtonBar(
selectedValues: state.tempElementTypes,
onClick: (v) => context.read<CharactersBloc>().add(CharactersEvent.elementTypeChanged(v)),
),
Text(s.weapons),
WeaponsButtonBar(
selectedValues: state.tempWeaponTypes,
onClick: (v) => context.read<CharactersBloc>().add(CharactersEvent.weaponTypeChanged(v)),
),
Text(s.rarity),
RarityRating(
rarity: state.rarity,
onRated: (v) => context.read<CharactersBloc>().add(CharactersEvent.rarityChanged(v)),
),
Text(s.others),
ButtonBar(
alignment: MainAxisAlignment.spaceEvenly,
children: [
ItemPopupMenuFilter<ItemStatusType>(
tooltipText: '${s.released} / ${s.brandNew} / ${s.comingSoon}',
values: ItemStatusType.values,
selectedValue: state.tempStatusType,
onSelected: (v) => context.read<CharactersBloc>().add(CharactersEvent.itemStatusChanged(v)),
icon: const Icon(GenshinDb.sliders_h, size: 18),
itemText: (val) => s.translateReleasedUnreleasedType(val),
),
ItemPopupMenuFilter<CharacterRoleType>(
tooltipText: s.role,
values: CharacterRoleType.values.where((el) => el != CharacterRoleType.na).toList(),
selectedValue: state.tempRoleType,
onSelected: (v) => context.read<CharactersBloc>().add(CharactersEvent.roleTypeChanged(v)),
itemText: (val) => s.translateCharacterType(val),
icon: const Icon(GenshinDb.trefoil_lily, size: 18),
),
ItemPopupMenuFilterWithAllValue(
tooltipText: s.region,
values: RegionType.values.map((e) => e.index).toList(),
selectedValue: state.tempRegionType?.index,
onAllOrValueSelected: (v) =>
context.read<CharactersBloc>().add(CharactersEvent.regionTypeChanged(v == null ? null : RegionType.values[v])),
itemText: (val) => s.translateRegionType(RegionType.values[val]),
icon: const Icon(GenshinDb.reactor, size: 18),
),
ItemPopupMenuFilter<CharacterFilterType>(
tooltipText: s.sortBy,
values: CharacterFilterType.values,
selectedValue: state.tempCharacterFilterType,
onSelected: (v) => context.read<CharactersBloc>().add(CharactersEvent.characterFilterTypeChanged(v)),
itemText: (val) => s.translateCharacterFilterType(val),
),
SortDirectionPopupMenuFilter(
selectedSortDirection: state.tempSortDirectionType,
onSelected: (v) => context.read<CharactersBloc>().add(CharactersEvent.sortDirectionTypeChanged(v)),
)
],
),
ButtonBar(
buttonPadding: Styles.edgeInsetHorizontal10,
children: <Widget>[
OutlinedButton(
onPressed: () {
context.read<CharactersBloc>().add(const CharactersEvent.cancelChanges());
Navigator.pop(context);
},
child: Text(s.cancel, style: TextStyle(color: theme.primaryColor)),
),
OutlinedButton(
onPressed: () {
context.read<CharactersBloc>().add(const CharactersEvent.resetFilters());
Navigator.pop(context);
},
child: Text(s.reset, style: TextStyle(color: theme.primaryColor)),
),
ElevatedButton(
onPressed: () {
context.read<CharactersBloc>().add(const CharactersEvent.applyFilterChanges());
Navigator.pop(context);
},
child: Text(s.ok),
)
],
),
],
),
),
),
);
}
}