20345cbf
吴启风
feat:修改头像权限androi...
|
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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
|
import 'package:flutter/material.dart';
import 'package:flutter_easyloading/flutter_easyloading.dart';
import 'package:permission_handler/permission_handler.dart';
///权限检测工具
class PermissionUtil {
static defaultCall(name) {
EasyLoading.showToast(name);
}
/// 检测石是否有权限
/// [permissionList] 权限申请列表
/// [errMsg] 错误信息
/// [onSuccess] 全部成功
/// [onFailed] 有一个失败
/// [goSetting] 前往设置
static checkPermission(
{required List<Permission> permissionList,
String? errMsg,
VoidCallback? onSuccess,
VoidCallback? onFailed,
VoidCallback? goSetting}) async {
///一个新待申请权限列表
List<Permission> newPermissionList = [];
///遍历当前权限申请列表
for (Permission permission in permissionList) {
PermissionStatus status = await permission.status;
///如果不是允许状态就添加到新的申请列表中
if (!status.isGranted) {
newPermissionList.add(permission);
}
}
///如果需要重新申请的列表不是空的
if (newPermissionList.isNotEmpty) {
PermissionStatus permissionStatus =
await requestPermission(newPermissionList);
switch (permissionStatus) {
///拒绝状态
case PermissionStatus.denied:
onFailed != null ? onFailed() : defaultCall("权限申请失败");
break;
///允许状态
case PermissionStatus.granted:
onSuccess != null ? onSuccess() : defaultCall("权限申请成功");
break;
/// 永久拒绝 活动限制
case PermissionStatus.restricted:
case PermissionStatus.limited:
case PermissionStatus.permanentlyDenied:
case PermissionStatus.provisional:
goSetting != null
? goSetting( )
:await openAppSettings();
break;
}
} else {
onSuccess != null ? onSuccess() : defaultCall("权限申请成功");
}
}
/// 获取新列表中的权限 如果有一项不合格就返回false
static requestPermission(List<Permission> permissionList) async {
Map<Permission, PermissionStatus> statuses = await permissionList.request();
PermissionStatus currentPermissionStatus = PermissionStatus.granted;
statuses.forEach((key, value) {
if (!value.isGranted) {
currentPermissionStatus = value;
return;
}
});
return currentPermissionStatus;
}
static checkLocationAlways(
{VoidCallback? onSuccess,
VoidCallback? onFailed,
VoidCallback? goSetting}) async {
///获取前置状态
/// Android没有这一步 ios会先访问这个再访问其他的
PermissionStatus status = PermissionStatus.granted;
status = await _checkSinglePermission(Permission.locationWhenInUse);
///获取第二个状态
PermissionStatus status2 = PermissionStatus.denied;
///如果前置状态为成功才能执行获取第二个状态
if (status.isGranted) {
status2 = await _checkSinglePermission(Permission.locationAlways);
}
///如果两个都成功那么就返回成功
if (status.isGranted && status2.isGranted) {
onSuccess != null ? onSuccess() : defaultCall("权限申请成功");
///如果有一个拒绝那么就失败了
} else if (status.isDenied || status2.isDenied) {
onFailed != null ? onFailed() : defaultCall("权限申请失败");
} else {
goSetting != null ? goSetting() : await openAppSettings();
}
}
static _checkSinglePermission(Permission permission) async {
///获取当前状态
PermissionStatus status = await permission.status;
PermissionStatus currentPermissionStatus = PermissionStatus.granted;
///如果它状态不是允许那么就去获取
if (!status.isGranted) {
currentPermissionStatus = await requestPermission([permission]);
}
///返回最终状态
return currentPermissionStatus;
}
}
|