handlePermissions static method
dynamic
handlePermissions(
- BuildContext context, {
- required List permissionList,
- VoidCallback? onSuccess,
- VoidCallback? onFailed,
- bool showGoSetting = true,
Implementation
static handlePermissions(BuildContext context,
{required List permissionList, //List<Permission> permissionList
VoidCallback? onSuccess,
VoidCallback? onFailed,
bool showGoSetting = true}) async {
List<Permission> newPermissionList = [];
for (Permission permission in permissionList) {
PermissionStatus status = await permission.status;
///如果不是允许状态就添加到新的申请列表中permissionList = {_GrowableList} size = 3
if (!status.isGranted) {
//权限申请不通过
if (Platform.isIOS && permission == Permission.photos) {
// 判断ios 14+ 和 图片权限
DeviceInfoPlugin deviceInfo = DeviceInfoPlugin();
IosDeviceInfo iosInfo = await deviceInfo.iosInfo;
String systemVersion = iosInfo.systemVersion;
String splitVersion = systemVersion.split('.')[0];
if (int.parse(splitVersion) >= 14) {
if (!status.isLimited) {
newPermissionList.add(permission);
}
} else {
newPermissionList.add(permission);
}
} else {
newPermissionList.add(permission);
}
}
}
if (newPermissionList.isNotEmpty) {
Map requestRes = await _requestPermission(newPermissionList);
if (requestRes.containsKey("granted")) {
//全部通过
if (onSuccess != null) {
onSuccess();
}
} else if (requestRes.containsKey("need_notify_status")) {
//有需要弹框的 先解决弹框的
if (showGoSetting) {
_showDeniedDialog(context, requestRes["need_notify_status"]);
}
} else if (requestRes.containsKey("denied_status")) {
//有拒绝的
if (onFailed != null) {
onFailed();
}
}
/*switch (requestRes["status"]) {
///拒绝状态
//权限拒绝, 需要区分IOS和Android,二者不一样
case PermissionStatus.denied: //还能申请并弹出系统权限的哪个框 不在询问就不谈了
if (onFailed != null) {
onFailed();
}
break;
///允许状态
case PermissionStatus.granted:
if (onSuccess != null) {
onSuccess();
}
break;
/// 永久拒绝 活动限制 活动限制(例如,设置了家长///控件,仅在iOS以上受支持。)
case PermissionStatus.permanentlyDenied: //只有安卓有 权限永久拒绝,且不在提示,需要进入设置界面
case PermissionStatus.restricted: //只有ios有
case PermissionStatus.limited: //只有ios有
if (showGoSetting) {
_showDeniedDialog(context, requestRes["permission"]);
}
break;
}*/
} else {
if (onSuccess != null) {
onSuccess();
}
}
}