import 'package:flutter/cupertino.dart'; import 'package:permission_handler/permission_handler.dart'; import 'package:wow_english/common/permission/permissionRequestPage.dart'; /// 带隐私合规功能的权限检查及请求入口 /// 外部可通过此方法来进行权限的检查和请求,将自动跳转到`PermissionRequestPage`页面。 /// 传入 `Permission` 以及对应的(中文)权限名称 `permissionName` /// permissionDesc:设备权限使用说明(描述) /// isRequiredPermission:是否强制要求 如果为 `true`,则 "取消" 按钮将执行 "退出app" 的操作 /// return 如果有权限则返回 `Future` Future requestPermission( BuildContext context, Permission permission, String permissionName, String permissionDesc, {bool isRequiredPermission = false}) async { return requestPermissions(context, [permission], [permissionName], permissionDesc, isRequiredPermission: isRequiredPermission); } Future requestPermissions( BuildContext context, List permissions, List permissionNames, String permissionDesc, {bool isRequiredPermission = false}) async { // List statuses = await Future.wait( // permissions.map((permission) => permission.status), // ); // bool allGranted = statuses.every((status) => status.isGranted); bool allGranted = await isPermissionsGranted(permissions); if (allGranted) { return true; } else { return await Navigator.of(context).push(PageRouteBuilder( opaque: false, pageBuilder: ((context, animation, secondaryAnimation) { return PermissionRequestPage(permissions, permissionNames, permissionDesc, isRequiredPermission: isRequiredPermission); }))); } } ///(实际请求前)判断权限数组是否都授予 Future isPermissionsGranted(List permissions) async { // 使用 every 直接检查权限状态 return await Future.wait(permissions.map((permission) async { return await permission.status.isGranted; })).then((statuses) => statuses.every((status) => status)); } ///请求权限 Future?> requestPermissionsInner(List permissionList) async { Map statusesMap = await permissionList.request(); for (var entry in statusesMap.entries) { if (!entry.value.isGranted) { return entry; } } return null; }