|
@@ -1,199 +1,207 @@
|
|
-//
|
|
|
|
-// import 'package:flutter/material.dart';
|
|
|
|
-// import 'package:permission_handler/permission_handler.dart';
|
|
|
|
-// import 'package:photo_manager/photo_manager.dart';
|
|
|
|
-// import 'package:shared/utils/device_utils.dart';
|
|
|
|
-// import 'package:shared/utils/log_utils.dart';
|
|
|
|
-// import 'package:widgets/dialog/app_default_dialog.dart';
|
|
|
|
-// import 'package:widgets/dialog/permission_desc_dialog.dart';
|
|
|
|
-//
|
|
|
|
-// import '../dialog/dialog_engine.dart';
|
|
|
|
-//
|
|
|
|
-//
|
|
|
|
-// /**
|
|
|
|
-// * 动态权限的申请与校验
|
|
|
|
-// */
|
|
|
|
-// class PermissionEngine {
|
|
|
|
-// // 私有构造函数
|
|
|
|
-// PermissionEngine._privateConstructor();
|
|
|
|
-//
|
|
|
|
-// // 单例实例
|
|
|
|
-// static final PermissionEngine _instance = PermissionEngine._privateConstructor();
|
|
|
|
-//
|
|
|
|
-// // 获取单例实例的访问点
|
|
|
|
-// factory PermissionEngine() {
|
|
|
|
-// return _instance;
|
|
|
|
-// }
|
|
|
|
-//
|
|
|
|
-// /// 申请多媒体相册权限
|
|
|
|
-// void requestPhotosPermission(void Function() success) async {
|
|
|
|
-// //相册的选项
|
|
|
|
-// if (DeviceUtils.isIOS) {
|
|
|
|
-// //申请授权
|
|
|
|
-// final value = await PhotoManager.requestPermissionExtend();
|
|
|
|
-// if (value.hasAccess) {
|
|
|
|
-// //已授权
|
|
|
|
-// Log.d("相册已授权");
|
|
|
|
-// success();
|
|
|
|
-// } else if (value == PermissionState.limited) {
|
|
|
|
-// Log.d("相册访问受限,去设置受限");
|
|
|
|
-// PhotoManager.presentLimited();
|
|
|
|
-// } else {
|
|
|
|
-// Log.d("相册无授权,去设置");
|
|
|
|
-// DialogEngine.show(
|
|
|
|
-// widget: AppDefaultDialog(
|
|
|
|
-// "无相册权限,前往设置",
|
|
|
|
-// confirmAction: () {
|
|
|
|
-// PhotoManager.openSetting();
|
|
|
|
-// },
|
|
|
|
-// ),
|
|
|
|
-// );
|
|
|
|
-// }
|
|
|
|
-// } else {
|
|
|
|
-// //Android是否有SD卡权限
|
|
|
|
-// var status = await Permission.storage.status;
|
|
|
|
-// late PermissionState ps;
|
|
|
|
-// if (status.isGranted) {
|
|
|
|
-// // 已经授权
|
|
|
|
-// success();
|
|
|
|
-// } else {
|
|
|
|
-// // 未授权,则准备发起一次申请
|
|
|
|
-// var permissionRequestFuture = PhotoManager.requestPermissionExtend();
|
|
|
|
-//
|
|
|
|
-// // 延迟500毫秒的Future
|
|
|
|
-// var delayFuture = Future.delayed(Duration(milliseconds: 500), () => 'delay');
|
|
|
|
-//
|
|
|
|
-// // 使用Future.any等待上述两个Future中的任何一个完成
|
|
|
|
-// var firstCompleted = await Future.any([permissionRequestFuture, delayFuture]);
|
|
|
|
-//
|
|
|
|
-// // 判断响应结果
|
|
|
|
-// if (firstCompleted == 'delay') {
|
|
|
|
-// Log.d("判断响应结果:1");
|
|
|
|
-// // 如果是延迟Future完成了,表示500毫秒内没有获得权限响应,显示对话框
|
|
|
|
-// _showPermissionDialog("“YYBusiness”想访问你的多媒体相册 用于图片上传,图片保存等功能,请允许我获取您的权限");
|
|
|
|
-// // 再次等待权限请求结果
|
|
|
|
-// ps = await permissionRequestFuture;
|
|
|
|
-// DialogEngine.dismiss(tag: "permission");
|
|
|
|
-// } else {
|
|
|
|
-// Log.d("判断响应结果:2");
|
|
|
|
-// // 权限请求已完成,立刻取消对话框展示(如果已经展示的话)
|
|
|
|
-// DialogEngine.dismiss(tag: "permission");
|
|
|
|
-// ps = firstCompleted as PermissionState;
|
|
|
|
-// }
|
|
|
|
-//
|
|
|
|
-// if (ps.isAuth) {
|
|
|
|
-// // 用户授权
|
|
|
|
-// success();
|
|
|
|
-// } else {
|
|
|
|
-// // 权限被拒绝
|
|
|
|
-// await DialogEngine.show(
|
|
|
|
-// widget: AppDefaultDialog("请到您的手机设置打开相册的权限", title: "提醒", confirmText: "去设置", confirmAction: () {
|
|
|
|
-// openAppSettings();
|
|
|
|
-// }),
|
|
|
|
-// );
|
|
|
|
-// }
|
|
|
|
-// }
|
|
|
|
-// }
|
|
|
|
-// }
|
|
|
|
-//
|
|
|
|
-// /// 申请相机权限
|
|
|
|
-// void requestCameraPermission(void Function() success) async {
|
|
|
|
-// // 获取当前的权限
|
|
|
|
-// var status = await Permission.camera.status;
|
|
|
|
-// if (status.isGranted) {
|
|
|
|
-// // 已经授权
|
|
|
|
-// success();
|
|
|
|
-// } else {
|
|
|
|
-// // 未授权,则准备发起一次申请
|
|
|
|
-// var permissionRequestFuture = Permission.camera.request();
|
|
|
|
-//
|
|
|
|
-// // 延迟500毫秒的Future
|
|
|
|
-// var delayFuture = Future.delayed(Duration(milliseconds: 500), () => 'delay');
|
|
|
|
-//
|
|
|
|
-// // 使用Future.any等待上述两个Future中的任何一个完成
|
|
|
|
-// var firstCompleted = await Future.any([permissionRequestFuture, delayFuture]);
|
|
|
|
-//
|
|
|
|
-// // 判断响应结果
|
|
|
|
-// if (firstCompleted == 'delay') {
|
|
|
|
-// // 如果是延迟Future完成了,表示500毫秒内没有获得权限响应,显示对话框
|
|
|
|
-// _showPermissionDialog("“YYBusiness”申请调用您的相机权限 用于使用拍摄头像,图片上传保存等功能,请允许我获取您的权限");
|
|
|
|
-// // 再次等待权限请求结果
|
|
|
|
-// status = await permissionRequestFuture;
|
|
|
|
-// DialogEngine.dismiss(tag: "permission");
|
|
|
|
-// } else {
|
|
|
|
-// // 权限请求已完成,立刻取消对话框展示(如果已经展示的话)
|
|
|
|
-// DialogEngine.dismiss(tag: "permission");
|
|
|
|
-// status = firstCompleted as PermissionStatus;
|
|
|
|
-// }
|
|
|
|
-//
|
|
|
|
-// if (status.isGranted) {
|
|
|
|
-// // 用户授权
|
|
|
|
-// success();
|
|
|
|
-// } else {
|
|
|
|
-// // 权限被拒绝
|
|
|
|
-// await DialogEngine.show(
|
|
|
|
-// widget: AppDefaultDialog("请到您的手机设置打开相机的权限", title: "提醒", confirmText: "去设置", confirmAction: () {
|
|
|
|
-// openAppSettings();
|
|
|
|
-// }),
|
|
|
|
-// );
|
|
|
|
-// }
|
|
|
|
-// }
|
|
|
|
-// }
|
|
|
|
-//
|
|
|
|
-// /// 校验并申请定位权限
|
|
|
|
-// Future<bool> requestLocationPermission() async {
|
|
|
|
-// // 获取当前的权限
|
|
|
|
-// var status = await Permission.location.status;
|
|
|
|
-// if (status.isGranted) {
|
|
|
|
-// // 已经授权
|
|
|
|
-// return true;
|
|
|
|
-// } else {
|
|
|
|
-// // 未授权,则准备发起一次申请
|
|
|
|
-// var permissionRequestFuture = Permission.location.request();
|
|
|
|
-//
|
|
|
|
-// // 延迟500毫秒的Future
|
|
|
|
-// var delayFuture = Future.delayed(Duration(milliseconds: 500), () => 'delay');
|
|
|
|
-//
|
|
|
|
-// // 使用Future.any等待上述两个Future中的任何一个完成
|
|
|
|
-// var firstCompleted = await Future.any([permissionRequestFuture, delayFuture]);
|
|
|
|
-//
|
|
|
|
-// // 判断响应结果
|
|
|
|
-// if (firstCompleted == 'delay') {
|
|
|
|
-// // 如果是延迟Future完成了,表示500毫秒内没有获得权限响应,显示对话框
|
|
|
|
-// _showPermissionDialog("“YYBusiness”想访问您的定位权限获取您的位置来推荐附近的工作");
|
|
|
|
-// // 再次等待权限请求结果
|
|
|
|
-// status = await permissionRequestFuture;
|
|
|
|
-// DialogEngine.dismiss(tag: "permission");
|
|
|
|
-// } else {
|
|
|
|
-// Log.d("权限请求已完成,立刻取消对话框展示");
|
|
|
|
-// // 权限请求已完成,立刻取消对话框展示(如果已经展示的话)
|
|
|
|
-// DialogEngine.dismiss(tag: "permission");
|
|
|
|
-// status = firstCompleted as PermissionStatus;
|
|
|
|
-// }
|
|
|
|
-//
|
|
|
|
-// if (status.isGranted) {
|
|
|
|
-// // 用户授权
|
|
|
|
-// return true;
|
|
|
|
-// } else {
|
|
|
|
-// // 权限被拒绝
|
|
|
|
-// await DialogEngine.show(
|
|
|
|
-// widget: AppDefaultDialog("请到您的手机设置打开定位的权限", title: "提醒", confirmText: "去设置", confirmAction: () {
|
|
|
|
-// openAppSettings();
|
|
|
|
-// }),
|
|
|
|
-// );
|
|
|
|
-// return false;
|
|
|
|
-// }
|
|
|
|
-// }
|
|
|
|
-// }
|
|
|
|
-//
|
|
|
|
-// //顶部展示权限声明详情弹窗
|
|
|
|
-// void _showPermissionDialog(String desc) {
|
|
|
|
-// DialogEngine.show(
|
|
|
|
-// clickMaskDismiss: false,
|
|
|
|
-// backDismiss: true,
|
|
|
|
-// tag: "permission",
|
|
|
|
-// maskColor: Colors.transparent,
|
|
|
|
-// widget: PermissionDescDialog(desc),
|
|
|
|
-// );
|
|
|
|
-// }
|
|
|
|
-// }
|
|
|
|
|
|
+import 'package:flutter/material.dart';
|
|
|
|
+import 'package:permission_handler/permission_handler.dart';
|
|
|
|
+import 'package:photo_manager/photo_manager.dart';
|
|
|
|
+import 'package:shared/utils/device_utils.dart';
|
|
|
|
+import 'package:shared/utils/log_utils.dart';
|
|
|
|
+import 'package:widgets/dialog/app_default_dialog.dart';
|
|
|
|
+import 'package:widgets/dialog/permission_desc_dialog.dart';
|
|
|
|
+
|
|
|
|
+import '../dialog/dialog_engine.dart';
|
|
|
|
+
|
|
|
|
+/*
|
|
|
|
+ * 动态权限的申请与校验
|
|
|
|
+ */
|
|
|
|
+class PermissionEngine {
|
|
|
|
+ // 私有构造函数
|
|
|
|
+ PermissionEngine._privateConstructor();
|
|
|
|
+
|
|
|
|
+ // 单例实例
|
|
|
|
+ static final PermissionEngine _instance = PermissionEngine._privateConstructor();
|
|
|
|
+
|
|
|
|
+ // 获取单例实例的访问点
|
|
|
|
+ factory PermissionEngine() {
|
|
|
|
+ return _instance;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /// 申请多媒体相册权限
|
|
|
|
+ void requestPhotosPermission(void Function() success) async {
|
|
|
|
+ //相册的选项
|
|
|
|
+ if (DeviceUtils.isIOS) {
|
|
|
|
+ //申请授权
|
|
|
|
+ final value = await PhotoManager.requestPermissionExtend();
|
|
|
|
+ if (value.hasAccess) {
|
|
|
|
+ //已授权
|
|
|
|
+ Log.d("相册已授权");
|
|
|
|
+ success();
|
|
|
|
+ } else if (value == PermissionState.limited) {
|
|
|
|
+ Log.d("相册访问受限,去设置受限");
|
|
|
|
+ PhotoManager.presentLimited();
|
|
|
|
+ } else {
|
|
|
|
+ Log.d("相册无授权,去设置");
|
|
|
|
+ DialogEngine.show(
|
|
|
|
+ widget: AppDefaultDialog(
|
|
|
|
+ title: "提示",
|
|
|
|
+ message: '无相册权限,前往设置',
|
|
|
|
+ confirmAction: () {
|
|
|
|
+ PhotoManager.openSetting();
|
|
|
|
+ },
|
|
|
|
+ ),
|
|
|
|
+ );
|
|
|
|
+ }
|
|
|
|
+ } else {
|
|
|
|
+ //Android是否有SD卡权限
|
|
|
|
+ var status = await Permission.storage.status;
|
|
|
|
+ late PermissionState ps;
|
|
|
|
+ if (status.isGranted) {
|
|
|
|
+ // 已经授权
|
|
|
|
+ success();
|
|
|
|
+ } else {
|
|
|
|
+ // 未授权,则准备发起一次申请
|
|
|
|
+ var permissionRequestFuture = PhotoManager.requestPermissionExtend();
|
|
|
|
+
|
|
|
|
+ // 延迟500毫秒的Future
|
|
|
|
+ var delayFuture = Future.delayed(Duration(milliseconds: 500), () => 'delay');
|
|
|
|
+
|
|
|
|
+ // 使用Future.any等待上述两个Future中的任何一个完成
|
|
|
|
+ var firstCompleted = await Future.any([permissionRequestFuture, delayFuture]);
|
|
|
|
+
|
|
|
|
+ // 判断响应结果
|
|
|
|
+ if (firstCompleted == 'delay') {
|
|
|
|
+ Log.d("判断响应结果:1");
|
|
|
|
+ // 如果是延迟Future完成了,表示500毫秒内没有获得权限响应,显示对话框
|
|
|
|
+ _showPermissionDialog("“YYBusiness”想访问你的多媒体相册 用于图片上传,图片保存等功能,请允许我获取您的权限");
|
|
|
|
+ // 再次等待权限请求结果
|
|
|
|
+ ps = await permissionRequestFuture;
|
|
|
|
+ DialogEngine.dismiss(tag: "permission");
|
|
|
|
+ } else {
|
|
|
|
+ Log.d("判断响应结果:2");
|
|
|
|
+ // 权限请求已完成,立刻取消对话框展示(如果已经展示的话)
|
|
|
|
+ DialogEngine.dismiss(tag: "permission");
|
|
|
|
+ ps = firstCompleted as PermissionState;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (ps.isAuth) {
|
|
|
|
+ // 用户授权
|
|
|
|
+ success();
|
|
|
|
+ } else {
|
|
|
|
+ // 权限被拒绝
|
|
|
|
+ await DialogEngine.show(
|
|
|
|
+ widget: AppDefaultDialog(
|
|
|
|
+ message: "请到您的手机设置打开相册的权限",
|
|
|
|
+ title: "提醒",
|
|
|
|
+ confirmAction: () {
|
|
|
|
+ openAppSettings();
|
|
|
|
+ }),
|
|
|
|
+ );
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /// 申请相机权限
|
|
|
|
+ void requestCameraPermission(void Function() success) async {
|
|
|
|
+ // 获取当前的权限
|
|
|
|
+ var status = await Permission.camera.status;
|
|
|
|
+ if (status.isGranted) {
|
|
|
|
+ // 已经授权
|
|
|
|
+ success();
|
|
|
|
+ } else {
|
|
|
|
+ // 未授权,则准备发起一次申请
|
|
|
|
+ var permissionRequestFuture = Permission.camera.request();
|
|
|
|
+
|
|
|
|
+ // 延迟500毫秒的Future
|
|
|
|
+ var delayFuture = Future.delayed(Duration(milliseconds: 500), () => 'delay');
|
|
|
|
+
|
|
|
|
+ // 使用Future.any等待上述两个Future中的任何一个完成
|
|
|
|
+ var firstCompleted = await Future.any([permissionRequestFuture, delayFuture]);
|
|
|
|
+
|
|
|
|
+ // 判断响应结果
|
|
|
|
+ if (firstCompleted == 'delay') {
|
|
|
|
+ // 如果是延迟Future完成了,表示500毫秒内没有获得权限响应,显示对话框
|
|
|
|
+ _showPermissionDialog("“YYBusiness”申请调用您的相机权限 用于使用拍摄头像,图片上传保存等功能,请允许我获取您的权限");
|
|
|
|
+ // 再次等待权限请求结果
|
|
|
|
+ status = await permissionRequestFuture;
|
|
|
|
+ DialogEngine.dismiss(tag: "permission");
|
|
|
|
+ } else {
|
|
|
|
+ // 权限请求已完成,立刻取消对话框展示(如果已经展示的话)
|
|
|
|
+ DialogEngine.dismiss(tag: "permission");
|
|
|
|
+ status = firstCompleted as PermissionStatus;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (status.isGranted) {
|
|
|
|
+ // 用户授权
|
|
|
|
+ success();
|
|
|
|
+ } else {
|
|
|
|
+ // 权限被拒绝
|
|
|
|
+ await DialogEngine.show(
|
|
|
|
+ widget: AppDefaultDialog(
|
|
|
|
+ message: "请到您的手机设置打开相机的权限",
|
|
|
|
+ title: "提醒",
|
|
|
|
+ confirmAction: () {
|
|
|
|
+ openAppSettings();
|
|
|
|
+ }),
|
|
|
|
+ );
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /// 校验并申请定位权限
|
|
|
|
+ Future<bool> requestLocationPermission() async {
|
|
|
|
+ // 获取当前的权限
|
|
|
|
+ var status = await Permission.location.status;
|
|
|
|
+ if (status.isGranted) {
|
|
|
|
+ // 已经授权
|
|
|
|
+ return true;
|
|
|
|
+ } else {
|
|
|
|
+ // 未授权,则准备发起一次申请
|
|
|
|
+ var permissionRequestFuture = Permission.location.request();
|
|
|
|
+
|
|
|
|
+ // 延迟500毫秒的Future
|
|
|
|
+ var delayFuture = Future.delayed(Duration(milliseconds: 500), () => 'delay');
|
|
|
|
+
|
|
|
|
+ // 使用Future.any等待上述两个Future中的任何一个完成
|
|
|
|
+ var firstCompleted = await Future.any([permissionRequestFuture, delayFuture]);
|
|
|
|
+
|
|
|
|
+ // 判断响应结果
|
|
|
|
+ if (firstCompleted == 'delay') {
|
|
|
|
+ // 如果是延迟Future完成了,表示500毫秒内没有获得权限响应,显示对话框
|
|
|
|
+ _showPermissionDialog("“YYBusiness”想访问您的定位权限获取您的位置来推荐附近的工作");
|
|
|
|
+ // 再次等待权限请求结果
|
|
|
|
+ status = await permissionRequestFuture;
|
|
|
|
+ DialogEngine.dismiss(tag: "permission");
|
|
|
|
+ } else {
|
|
|
|
+ Log.d("权限请求已完成,立刻取消对话框展示");
|
|
|
|
+ // 权限请求已完成,立刻取消对话框展示(如果已经展示的话)
|
|
|
|
+ DialogEngine.dismiss(tag: "permission");
|
|
|
|
+ status = firstCompleted as PermissionStatus;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ if (status.isGranted) {
|
|
|
|
+ // 用户授权
|
|
|
|
+ return true;
|
|
|
|
+ } else {
|
|
|
|
+ // 权限被拒绝
|
|
|
|
+ await DialogEngine.show(
|
|
|
|
+ widget: AppDefaultDialog(
|
|
|
|
+ message: "请到您的手机设置打开定位的权限",
|
|
|
|
+ title: "提醒",
|
|
|
|
+ confirmAction: () {
|
|
|
|
+ openAppSettings();
|
|
|
|
+ }),
|
|
|
|
+ );
|
|
|
|
+ return false;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ //顶部展示权限声明详情弹窗
|
|
|
|
+ void _showPermissionDialog(String desc) {
|
|
|
|
+ DialogEngine.show(
|
|
|
|
+ clickMaskDismiss: false,
|
|
|
|
+ backDismiss: true,
|
|
|
|
+ tag: "permission",
|
|
|
|
+ maskColor: Colors.transparent,
|
|
|
|
+ widget: PermissionDescDialog(desc),
|
|
|
|
+ );
|
|
|
|
+ }
|
|
|
|
+}
|