| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119 |
- 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<bool> request(Permission permission) async {
- final status = await permission.request();
- if (status.isGranted) return true;
- if (status.isPermanentlyDenied) {
- // 可选择引导用户去设置页面
- debugPrint('🚫 权限永久拒绝:${permission.toString()}');
- }
- return false;
- }
- /// 请求多个权限,返回是否全部通过
- static Future<bool> requestMultiple(List<Permission> permissions) async {
- final statuses = await permissions.request();
- // 判断是否全部 granted
- return statuses.values.every((status) => status.isGranted);
- }
- /// 检查权限是否已授权
- static Future<bool> isGranted(Permission permission) async {
- return await permission.isGranted;
- }
- /// 是否永久拒绝(无法再次请求,只能引导去设置)
- static Future<bool> isPermanentlyDenied(Permission permission) async {
- return await permission.isPermanentlyDenied;
- }
- /// 打开系统设置
- static Future<bool> openAppSettings() async {
- return await openAppSettings();
- }
- /// 请求权限并提示处理
- static Future<bool> 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<bool> requestCameraPermission() async {
- List<Permission> 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<bool> requestLocationPermission() async {
- final granted = await requestMultiple([
- Permission.location,
- Permission.storage,
- ]);
- return granted;
- }
- /// 请求麦克风权限(包括麦克风 + 存储权限)
- static Future<bool> requestMicrophonePermission() async {
- final granted = await requestMultiple([
- Permission.microphone,
- Permission.storage,
- ]);
- return granted;
- }
- /// 请求照片权限(包括相册 + 存储权限)
- static Future<bool> requestPhotoPermission() async {
- final granted = await requestMultiple([
- Permission.photos,
- Permission.storage,
- ]);
- return granted;
- }
- /// 请求录音权限(包括麦克风 + 存储权限)
- static Future<bool> requestAudioPermission() async {
- final granted = await requestMultiple([
- Permission.microphone,
- Permission.storage,
- ]);
- return granted;
- }
- }
|