-
-
Notifications
You must be signed in to change notification settings - Fork 47
/
main_tab_page.dart
120 lines (112 loc) · 3.79 KB
/
main_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
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
import 'package:flutter/material.dart';
import 'package:flutter_bloc/flutter_bloc.dart';
import 'package:genshindb/application/bloc.dart';
import 'package:genshindb/generated/l10n.dart';
import 'package:genshindb/presentation/shared/extensions/focus_scope_node_extensions.dart';
import 'package:rate_my_app/rate_my_app.dart';
import 'artifacts/artifacts_page.dart';
import 'characters/characters_page.dart';
import 'home/home_page.dart';
import 'map/map_page.dart';
import 'shared/genshin_db_icons.dart';
import 'weapons/weapons_page.dart';
class MainTabPage extends StatefulWidget {
@override
_MainTabPageState createState() => _MainTabPageState();
}
class _MainTabPageState extends State<MainTabPage> with SingleTickerProviderStateMixin {
bool _didChangeDependencies = false;
TabController _tabController;
int _index = 2;
final _pages = [
const CharactersPage(),
const WeaponsPage(),
HomePage(),
ArtifactsPage(),
MapPage(),
];
@override
void initState() {
_tabController = TabController(
initialIndex: _index,
length: _pages.length,
vsync: this,
);
super.initState();
}
@override
void didChangeDependencies() {
super.didChangeDependencies();
if (_didChangeDependencies) return;
_didChangeDependencies = true;
context.read<HomeBloc>().add(const HomeEvent.init());
context.read<CharactersBloc>().add(const CharactersEvent.init());
context.read<WeaponsBloc>().add(const WeaponsEvent.init());
context.read<ArtifactsBloc>().add(const ArtifactsEvent.init());
context.read<ElementsBloc>().add(const ElementsEvent.init());
context.read<SettingsBloc>().add(const SettingsEvent.init());
}
@override
Widget build(BuildContext context) {
return RateMyAppBuilder(
rateMyApp: RateMyApp(minDays: 7, minLaunches: 10, remindDays: 7, remindLaunches: 10),
onInitialized: (ctx, rateMyApp) {
if (!rateMyApp.shouldOpenDialog) {
return;
}
final s = S.of(ctx);
rateMyApp.showRateDialog(
ctx,
title: s.rateThisApp,
message: s.rateMsg,
rateButton: s.rate,
laterButton: s.maybeLater,
noButton: s.noThanks,
);
},
builder: (ctx) => Scaffold(
body: SafeArea(
child: BlocConsumer<MainTabBloc, MainTabState>(
listener: (ctx, state) async {
state.maybeMap(
initial: (s) => _changeCurrentTab(s.currentSelectedTab),
orElse: () => {},
);
},
builder: (context, state) {
return TabBarView(
controller: _tabController,
physics: const NeverScrollableScrollPhysics(),
children: _pages,
);
},
),
),
bottomNavigationBar: BottomNavigationBar(
currentIndex: _index,
showUnselectedLabels: true,
items: _buildBottomNavBars(),
type: BottomNavigationBarType.fixed,
onTap: (newIndex) => context.read<MainTabBloc>().add(MainTabEvent.goToTab(index: newIndex)),
),
),
);
}
List<BottomNavigationBarItem> _buildBottomNavBars() {
final s = S.of(context);
return [
BottomNavigationBarItem(label: s.characters, icon: const Icon(Icons.people)),
BottomNavigationBarItem(label: s.weapons, icon: const Icon(GenshinDb.crossed_swords)),
BottomNavigationBarItem(label: s.home, icon: const Icon(Icons.home)),
BottomNavigationBarItem(label: s.artifacts, icon: const Icon(GenshinDb.overmind)),
BottomNavigationBarItem(label: s.map, icon: const Icon(Icons.map)),
];
}
void _changeCurrentTab(int index) {
FocusScope.of(context).removeFocus();
setState(() {
_index = index;
_tabController.index = index;
});
}
}