home_page.dart
2.65 KB
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
import 'package:Parlando/common/permission_request_widget.dart';
import 'package:Parlando/routers/fluro_navigator.dart';
import 'package:flutter/material.dart';
import 'package:Parlando/account/page/account_page.dart';
import 'package:Parlando/poem/page/poem_page.dart';
import 'package:Parlando/widgets/double_tap_back_exit_app.dart';
import 'package:provider/provider.dart';
import 'provider/home_provider.dart';
import 'package:permission_handler/permission_handler.dart';
class Home extends StatefulWidget {
const Home({Key? key}) : super(key: key);
@override
_HomeState createState() => _HomeState();
}
class _HomeState extends State<Home> with RestorationMixin {
late List<Widget> _pageList;
final PageController _pageController = PageController();
HomeProvider provider = HomeProvider();
@override
void initState() {
super.initState();
initData();
List<String> list = [
"为您更好的体验应用,所以需要获取您的手机摄像头权限,以保存您的一些偏好设置",
"您已拒绝权限,所以无法保存您的一些偏好设置,将无法使用APP",
"您已拒绝权限,请在设置中心中同意APP的权限请求",
"其他错误"
];
Future.delayed(
Duration.zero,
() {
NavigatorUtils.pushPageByFade(
context: context,
//目标页面
targetPage: PermissionRequestWidget(
//所需要申请的权限
permission: Permission.camera,
//显示关闭应用按钮
isCloseApp: true,
//提示文案
permissionList: list,
),
//权限申请结果
dismissCallBack: (value) {},
);
},
);
}
@override
void dispose() {
_pageController.dispose();
super.dispose();
}
void initData() {
_pageList = [
const PoemPage(),
const AccountPage(),
];
}
@override
Widget build(BuildContext context) {
return ChangeNotifierProvider<HomeProvider>(
create: (_) => provider,
child: DoubleTapBackExitApp(
child: Scaffold(
// 使用PageView的原因参看 https://zhuanlan.zhihu.com/p/58582876
body: PageView(
physics: const NeverScrollableScrollPhysics(), // 禁止滑动
controller: _pageController,
onPageChanged: (int index) => provider.value = index,
children: _pageList,
),
),
),
);
}
@override
String? get restorationId => 'home';
@override
void restoreState(RestorationBucket? oldBucket, bool initialRestore) {
registerForRestoration(provider, 'BottomNavigationBarCurrentIndex');
}
}