Files
record-tool/lib/core/permission/permission_service.dart
2026-06-03 23:37:02 +08:00

52 lines
1.5 KiB
Dart

import 'package:permission_handler/permission_handler.dart';
class PermissionService {
PermissionService._();
static Future<bool> request(Permission permission) async {
final status = await permission.status;
if (status.isGranted || status.isLimited) return true;
final next = await permission.request();
return next.isGranted || next.isLimited;
}
static Future<Map<Permission, PermissionStatus>> requestAll(
Iterable<Permission> permissions,
) {
return permissions.toList().request();
}
/// 仅对尚未授予的权限发起系统授权弹窗,已授予则直接返回当前状态。
static Future<Map<Permission, PermissionStatus>> requestMissing(
Iterable<Permission> permissions,
) async {
final result = <Permission, PermissionStatus>{};
for (final permission in permissions) {
final current = await permission.status;
if (current.isGranted ||
current.isLimited ||
current.isPermanentlyDenied) {
result[permission] = current;
continue;
}
result[permission] = await permission.request();
}
return result;
}
static Future<bool> ensure(
Permission permission, {
bool openSettingsWhenPermanentlyDenied = true,
}) async {
final granted = await request(permission);
if (granted) return true;
final status = await permission.status;
if (openSettingsWhenPermanentlyDenied && status.isPermanentlyDenied) {
await openAppSettings();
}
return false;
}
}