|
@@ -1,199 +1,199 @@
|
|
|
-
|
|
|
-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(
|
|
|
+// "无相册权限,前往设置",
|
|
|
+// 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),
|
|
|
+// );
|
|
|
+// }
|
|
|
+// }
|