From 44f88ad34894f565ded7856d7848f37af1b37c6d Mon Sep 17 00:00:00 2001
From: zhaolong <928343994@qq.com>
Date: Wed, 9 Dec 2020 18:19:21 +0800
Subject: [PATCH] =?UTF-8?q?=E7=AC=AC=E4=BA=94=E8=AE=B2=20=E5=8A=A8?=
=?UTF-8?q?=E6=80=81=E6=9D=83=E9=99=90=E7=94=B3=E8=AF=B7=20=E5=B0=81?=
=?UTF-8?q?=E8=A3=85=20=20iOS=E6=9D=83=E9=99=90=E7=94=B3=E8=AF=B7=E9=80=82?=
=?UTF-8?q?=E9=85=8D?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
ios/Runner/Info.plist | 4 +
lib/src/index_page.dart | 141 ++++------------
.../common/perlmisson_request_widget.dart | 158 ++++++++++++++++++
3 files changed, 193 insertions(+), 110 deletions(-)
create mode 100644 lib/src/pages/common/perlmisson_request_widget.dart
diff --git a/ios/Runner/Info.plist b/ios/Runner/Info.plist
index 05a8027..d933b0b 100644
--- a/ios/Runner/Info.plist
+++ b/ios/Runner/Info.plist
@@ -43,5 +43,9 @@
UIViewControllerBasedStatusBarAppearance
+
+ NSCameraUsageDescription
+ APP需要访问您的相机权限
+
diff --git a/lib/src/index_page.dart b/lib/src/index_page.dart
index 7e1122c..e3bc3dc 100644
--- a/lib/src/index_page.dart
+++ b/lib/src/index_page.dart
@@ -3,6 +3,8 @@ import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:permission_handler/permission_handler.dart';
+import 'pages/common/perlmisson_request_widget.dart';
+
/// 创建人: Created by zhaolong
/// 创建时间:Created by on 2020/12/7.
///
@@ -19,32 +21,38 @@ class IndexPage extends StatefulWidget {
}
}
-class _IndexPageState extends State with WidgetsBindingObserver {
- //页面的初始化函数
+class _IndexPageState extends State {
+ List _list = [
+ "为您更好的体验应用,所以需要获取您的手机文件存储权限,以保存您的一些偏好设置",
+ "您已拒绝权限,所以无法保存您的一些偏好设置,将无法使用APP",
+ "您已拒绝权限,请在设置中心中同意APP的权限请求",
+ "其他错误"
+ ];
+
@override
void initState() {
super.initState();
-
- checkPermisson();
-
- //注册观察者
- WidgetsBinding.instance.addObserver(this);
- }
-
- @override
- void didChangeAppLifecycleState(AppLifecycleState state) {
- super.didChangeAppLifecycleState(state);
- if (state == AppLifecycleState.resumed && _isGoSetting) {
- checkPermisson();
- }
- }
-
- @override
- void dispose() {
- //注销观察者
- WidgetsBinding.instance.removeObserver(this);
-
- super.dispose();
+ Future.delayed(Duration.zero, () {
+ Navigator.of(context)
+ .push(
+ PageRouteBuilder(
+ opaque: false,
+ pageBuilder: (BuildContext context, Animation animation,
+ Animation secondaryAnimation) {
+ return PermissionRequestWidget(
+ permission: Permission.camera,
+ permissionList: _list,
+ );
+ }),
+ )
+ .then((value) {
+ if (value == null || !value) {
+ //权限请求不通过
+ } else {
+ //权限请求通过
+ }
+ });
+ });
}
@override
@@ -59,91 +67,4 @@ class _IndexPageState extends State with WidgetsBindingObserver {
),
);
}
-
- void checkPermisson({PermissionStatus status}) async {
- //权限
- Permission permission = Permission.storage;
-
- if (status == null) {
- //权限状态
- status = await permission.status;
- }
-
- if (status.isUndetermined) {
- //第一次申请
- showPermissonAlert(_list[0], "同意", permission);
- } else if (status.isDenied) {
- //用户第一次申请拒绝
- showPermissonAlert(_list[1], "重试", permission);
- } else if (status.isPermanentlyDenied) {
- //第二次申请 用户拒绝
- showPermissonAlert(_list[2], "去设置中心", permission, isSetting: true);
- } else {
- //通过
- }
- }
-
- List _list = [
- "为您更好的体验应用,所以需要获取您的手机文件存储权限,以保存您的一些偏好设置",
- "您已拒绝权限,所以无法保存您的一些偏好设置,将无法使用APP",
- "您已拒绝权限,请在设置中心中同意APP的权限请求",
- "其他错误"
- ];
-
- //是否去设置中心
- bool _isGoSetting = false;
-
- void showPermissonAlert(
- String message, String rightString, Permission permission,
- {bool isSetting = false}) {
- showCupertinoDialog(
- builder: (BuildContext context) {
- return CupertinoAlertDialog(
- title: Text("温馨提示"),
- content: Container(
- padding: EdgeInsets.all(12),
- child: Text(message),
- ),
- actions: [
- //左边的按钮
- CupertinoDialogAction(
- child: Text("退出应用"),
- onPressed: () {
- closeApp();
- },
- ),
- //右边的按钮
- CupertinoDialogAction(
- child: Text("$rightString"),
- onPressed: () {
- //关闭弹框
- Navigator.of(context).pop();
- if (isSetting) {
- _isGoSetting = true;
- //去设置中心
- openAppSettings();
- } else {
- //申请权限
- requestPermiss(permission);
- }
- },
- )
- ],
- );
- },
- context: context);
- }
-
- void requestPermiss(Permission permission) async {
- //发起权限申请
- PermissionStatus status = await permission.request();
-
- //校验
- checkPermisson();
- }
-
- void closeApp() {
- //关闭应用的方法
- SystemChannels.platform.invokeMethod("SystemNavigator.pop");
- }
}
diff --git a/lib/src/pages/common/perlmisson_request_widget.dart b/lib/src/pages/common/perlmisson_request_widget.dart
new file mode 100644
index 0000000..fcbfcf7
--- /dev/null
+++ b/lib/src/pages/common/perlmisson_request_widget.dart
@@ -0,0 +1,158 @@
+import 'dart:io';
+
+import 'package:flutter/cupertino.dart';
+import 'package:flutter/material.dart';
+import 'package:flutter/services.dart';
+import 'package:permission_handler/permission_handler.dart';
+
+/// 创建人: Created by zhaolong
+/// 创建时间:Created by on 2020/12/9.
+///
+/// 可关注公众号:我的大前端生涯 获取最新技术分享
+/// 可关注网易云课堂:https://study.163.com/instructor/1021406098.htm
+/// 可关注博客:https://blog.csdn.net/zl18603543572
+///
+/// 代码清单
+///权限请求模版
+class PermissionRequestWidget extends StatefulWidget {
+ final Permission permission;
+ final List permissionList;
+ final bool isCloseApp;
+ final String leftButtonText;
+
+ PermissionRequestWidget(
+ {@required this.permission,
+ @required this.permissionList,
+ this.leftButtonText = "再考虑一下",
+ this.isCloseApp = false});
+
+ @override
+ _PermissionRequestWidgetState createState() =>
+ _PermissionRequestWidgetState();
+}
+
+class _PermissionRequestWidgetState extends State
+ with WidgetsBindingObserver {
+ //页面的初始化函数
+ @override
+ void initState() {
+ super.initState();
+ checkPermisson();
+ //注册观察者
+ WidgetsBinding.instance.addObserver(this);
+ }
+
+ @override
+ void didChangeAppLifecycleState(AppLifecycleState state) {
+ super.didChangeAppLifecycleState(state);
+ if (state == AppLifecycleState.resumed && _isGoSetting) {
+ checkPermisson();
+ }
+ }
+
+ void checkPermisson({PermissionStatus status}) async {
+ //权限
+ Permission permission = widget.permission;
+
+ if (status == null) {
+ //权限状态
+ status = await permission.status;
+ }
+
+ if (status.isUndetermined) {
+ //第一次申请
+ showPermissonAlert(widget.permissionList[0], "同意", permission);
+ } else if (status.isDenied) {
+ if (Platform.isIOS) {
+ showPermissonAlert(widget.permissionList[2], "去设置中心", permission,
+ isSetting: true);
+ return;
+ }
+ //用户第一次申请拒绝
+ showPermissonAlert(widget.permissionList[1], "重试", permission);
+ } else if (status.isPermanentlyDenied) {
+ //第二次申请 用户拒绝
+ showPermissonAlert(widget.permissionList[2], "去设置中心", permission,
+ isSetting: true);
+ } else {
+ //通过
+ Navigator.of(context).pop(true);
+ }
+ }
+
+ //是否去设置中心
+ bool _isGoSetting = false;
+
+ void showPermissonAlert(
+ String message, String rightString, Permission permission,
+ {bool isSetting = false}) {
+ showCupertinoDialog(
+ builder: (BuildContext context) {
+ return CupertinoAlertDialog(
+ title: Text("温馨提示"),
+ content: Container(
+ padding: EdgeInsets.all(12),
+ child: Text(message),
+ ),
+ actions: [
+ //左边的按钮
+ CupertinoDialogAction(
+ child: Text("${widget.leftButtonText}"),
+ onPressed: () {
+ if (widget.isCloseApp) {
+ closeApp();
+ } else {
+ Navigator.of(context).pop(false);
+ }
+ },
+ ),
+ //右边的按钮
+ CupertinoDialogAction(
+ child: Text("$rightString"),
+ onPressed: () {
+ //关闭弹框
+ Navigator.of(context).pop();
+ if (isSetting) {
+ _isGoSetting = true;
+ //去设置中心
+ openAppSettings();
+ } else {
+ //申请权限
+ requestPermiss(permission);
+ }
+ },
+ )
+ ],
+ );
+ },
+ context: context);
+ }
+
+ void requestPermiss(Permission permission) async {
+ //发起权限申请
+ PermissionStatus status = await permission.request();
+
+ //校验
+ checkPermisson();
+ }
+
+ void closeApp() {
+ //关闭应用的方法
+ SystemChannels.platform.invokeMethod("SystemNavigator.pop");
+ }
+
+ @override
+ void dispose() {
+ //注销观察者
+ WidgetsBinding.instance.removeObserver(this);
+
+ super.dispose();
+ }
+
+ @override
+ Widget build(BuildContext context) {
+ return Scaffold(
+ backgroundColor: Colors.transparent,
+ );
+ }
+}