handlePermissions static method

dynamic handlePermissions(
  1. BuildContext context, {
  2. required List permissionList,
  3. VoidCallback? onSuccess,
  4. VoidCallback? onFailed,
  5. 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();
    }
  }
}