home_page.dart 2.65 KB
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');
  }
}