import 'dart:io'; import 'package:device_info_plus/device_info_plus.dart'; import 'package:flutter/material.dart'; import 'package:permission_handler/permission_handler.dart'; /// @author: bo.zeng /// @email: cnhbwds@gmail.com /// @date: 2025 2025/4/10 13:30 /// @description: class PermissionManager { /// 请求单个权限 static Future request(Permission permission) async { final status = await permission.request(); if (status.isGranted) return true; if (status.isPermanentlyDenied) { // 可选择引导用户去设置页面 debugPrint('🚫 权限永久拒绝:${permission.toString()}'); } return false; } /// 请求多个权限,返回是否全部通过 static Future requestMultiple(List permissions) async { final statuses = await permissions.request(); // 判断是否全部 granted return statuses.values.every((status) => status.isGranted); } /// 检查权限是否已授权 static Future isGranted(Permission permission) async { return await permission.isGranted; } /// 是否永久拒绝(无法再次请求,只能引导去设置) static Future isPermanentlyDenied(Permission permission) async { return await permission.isPermanentlyDenied; } /// 打开系统设置 static Future openAppSettings() async { return await openAppSettings(); } /// 请求权限并提示处理 static Future ensurePermission( Permission permission, { VoidCallback? onPermanentlyDenied, }) async { final granted = await request(permission); if (!granted && await isPermanentlyDenied(permission)) { if (onPermanentlyDenied != null) { onPermanentlyDenied(); } else { debugPrint('👉 引导用户前往设置页面'); } } return granted; } // ============================ 常用权限组合封装 ============================ /// 请求相机权限(包括相机 + 存储权限) static Future requestCameraPermission() async { List permissions = [Permission.camera]; if (Platform.isAndroid) { final androidInfo = await DeviceInfoPlugin().androidInfo; if (androidInfo.version.sdkInt >= 33) { permissions.add(Permission.photos); } else { permissions.add(Permission.storage); } } final statuses = await permissions.request(); return statuses.values.every((status) => status.isGranted); } /// 请求定位权限(包括定位 + 存储权限) static Future requestLocationPermission() async { final granted = await requestMultiple([ Permission.location, Permission.storage, ]); return granted; } /// 请求麦克风权限(包括麦克风 + 存储权限) static Future requestMicrophonePermission() async { final granted = await requestMultiple([ Permission.microphone, Permission.storage, ]); return granted; } /// 请求照片权限(包括相册 + 存储权限) static Future requestPhotoPermission() async { final granted = await requestMultiple([ Permission.photos, Permission.storage, ]); return granted; } /// 请求录音权限(包括麦克风 + 存储权限) static Future requestAudioPermission() async { final granted = await requestMultiple([ Permission.microphone, Permission.storage, ]); return granted; } }