-
-
Notifications
You must be signed in to change notification settings - Fork 47
/
home_page.dart
90 lines (83 loc) · 3.23 KB
/
home_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
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/today_materials/today_materials_page.dart';
import 'widgets/sliver_calculators_card.dart';
import 'widgets/sliver_characters_birthday_card.dart';
import 'widgets/sliver_elements_card.dart';
import 'widgets/sliver_game_codes_card.dart';
import 'widgets/sliver_main_title.dart';
import 'widgets/sliver_materials_card.dart';
import 'widgets/sliver_settings_card.dart';
import 'widgets/sliver_tierlist_card.dart';
import 'widgets/sliver_today_char_ascension_materials.dart';
import 'widgets/sliver_today_weapon_materials.dart';
import 'widgets/sliver_wish_simulator_card.dart';
class HomePage extends StatefulWidget {
@override
_HomePageState createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> with AutomaticKeepAliveClientMixin<HomePage> {
@override
bool get wantKeepAlive => true;
@override
Widget build(BuildContext context) {
super.build(context);
final s = S.of(context);
return CustomScrollView(
slivers: [
SliverCharactersBirthdayCard(),
SliverMainTitle(title: s.todayAscensionMaterials),
_buildClickableTitle(s.forCharacters, s.seeAll, context, onClick: () => _gotoMaterialsPage(context)),
SliverTodayCharAscensionMaterials(),
_buildClickableTitle(s.forWeapons, s.seeAll, context, onClick: () => _gotoMaterialsPage(context)),
SliverTodayWeaponMaterials(),
SliverMainTitle(title: s.elements),
SliverElementsCard(),
SliverMainTitle(title: s.materials),
SliverMaterialsCard(),
SliverMainTitle(title: s.calculators),
SliverCalculatorsCard(),
SliverMainTitle(title: s.wishSimulator),
SliverWishSimulatorCard(),
SliverMainTitle(title: s.tierListBuilder),
SliverTierList(),
SliverMainTitle(title: s.gameCodes),
SliverGameCodesCard(),
SliverMainTitle(title: s.settings),
SliverSettingsCard(),
],
);
}
Widget _buildClickableTitle(String title, String buttonText, BuildContext context, {Function onClick}) {
final theme = Theme.of(context);
final row = buttonText != null
? Row(
mainAxisSize: MainAxisSize.min,
mainAxisAlignment: MainAxisAlignment.end,
children: [const Icon(Icons.chevron_right), Text(buttonText)],
)
: null;
return SliverPadding(
padding: const EdgeInsets.only(top: 10),
sliver: SliverToBoxAdapter(
child: ListTile(
dense: true,
onTap: () => onClick?.call(),
visualDensity: const VisualDensity(vertical: -4, horizontal: -2),
trailing: row,
title: Text(
title,
textAlign: TextAlign.start,
style: theme.textTheme.subtitle1.copyWith(fontWeight: FontWeight.bold),
),
),
),
);
}
Future<void> _gotoMaterialsPage(BuildContext context) async {
context.read<TodayMaterialsBloc>().add(const TodayMaterialsEvent.init());
await Navigator.push(context, MaterialPageRoute(builder: (_) => TodayMaterialsPage()));
}
}