2024-04-10 15:21:08 +08:00
|
|
|
|
import 'package:flutter/cupertino.dart';
|
2024-04-10 09:47:05 +08:00
|
|
|
|
import 'package:get/get.dart';
|
|
|
|
|
|
import 'package:permission_handler/permission_handler.dart';
|
|
|
|
|
|
import 'package:star_lock/app_settings/app_settings.dart';
|
2024-04-10 15:21:08 +08:00
|
|
|
|
import 'package:star_lock/tools/storage.dart';
|
2024-04-10 09:47:05 +08:00
|
|
|
|
|
2024-09-30 16:31:29 +08:00
|
|
|
|
import '../../tools/bugly/bugly_tool.dart';
|
|
|
|
|
|
|
2024-04-10 09:47:05 +08:00
|
|
|
|
class PermissionDialog {
|
2024-05-22 10:33:07 +08:00
|
|
|
|
static Map<Permission, String> titles = <Permission, String>{
|
2024-04-10 17:18:53 +08:00
|
|
|
|
Permission.camera: '相机'.tr,
|
|
|
|
|
|
Permission.photos: '相册'.tr,
|
|
|
|
|
|
Permission.storage: '读写'.tr,
|
|
|
|
|
|
Permission.location: '定位'.tr,
|
2024-04-18 17:41:14 +08:00
|
|
|
|
Permission.bluetooth: '蓝牙'.tr,
|
|
|
|
|
|
Permission.bluetoothScan: '蓝牙'.tr,
|
|
|
|
|
|
Permission.bluetoothConnect: '蓝牙'.tr,
|
2024-04-10 09:47:05 +08:00
|
|
|
|
};
|
|
|
|
|
|
|
2024-05-22 10:33:07 +08:00
|
|
|
|
static Map<Permission, String> contents = <Permission, String>{
|
2024-04-10 17:18:53 +08:00
|
|
|
|
Permission.camera: '需要访问相机权限才能拍照上传文件例如头像上传'.tr,
|
|
|
|
|
|
Permission.photos: '需要访问相机权限才能使用相册图片上传文件上传头像'.tr,
|
|
|
|
|
|
Permission.storage: '需要访问读写权限才能使用本地图片上传头像'.tr,
|
|
|
|
|
|
Permission.location: '需要访问定位权限才能使用添加钥匙功能的位置信息'.tr,
|
2024-04-18 17:41:14 +08:00
|
|
|
|
Permission.bluetooth: '需要访问蓝牙权限才能使用添加钥匙功能的位置信息'.tr,
|
|
|
|
|
|
Permission.bluetoothScan: '需要访问蓝牙权限才能使用添加钥匙功能的位置信息'.tr,
|
|
|
|
|
|
Permission.bluetoothConnect: '需要访问蓝牙权限才能使用添加钥匙功能的位置信息'.tr,
|
2024-04-10 09:47:05 +08:00
|
|
|
|
};
|
|
|
|
|
|
|
2024-04-18 17:41:14 +08:00
|
|
|
|
static Future<bool> requestBluetooth() async {
|
|
|
|
|
|
if (Get.context == null) {
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
bool application = true;
|
2024-05-22 10:33:07 +08:00
|
|
|
|
final List<Permission> permissions = <Permission>[
|
2024-05-15 17:17:30 +08:00
|
|
|
|
Permission.bluetooth,
|
2024-04-18 17:41:14 +08:00
|
|
|
|
Permission.bluetoothScan,
|
|
|
|
|
|
Permission.bluetoothConnect,
|
2024-05-15 17:17:30 +08:00
|
|
|
|
];
|
|
|
|
|
|
Future<bool> getPermissionStatus(List<Permission> permissions) async {
|
|
|
|
|
|
bool isGranted = true;
|
2024-05-22 10:33:07 +08:00
|
|
|
|
final List<PermissionStatus> permissionStatus = <PermissionStatus>[];
|
|
|
|
|
|
for (final Permission per in permissions) {
|
2024-05-15 17:17:30 +08:00
|
|
|
|
permissionStatus.add(await per.status);
|
|
|
|
|
|
}
|
2024-05-22 10:33:07 +08:00
|
|
|
|
for (final PermissionStatus per in permissionStatus) {
|
2024-05-15 17:17:30 +08:00
|
|
|
|
isGranted = isGranted && per.isGranted;
|
|
|
|
|
|
}
|
|
|
|
|
|
if (GetPlatform.isIOS) {
|
|
|
|
|
|
isGranted = permissionStatus[0].isGranted;
|
|
|
|
|
|
}
|
|
|
|
|
|
return isGranted;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2024-05-22 10:33:07 +08:00
|
|
|
|
const Permission permission = Permission.bluetoothScan;
|
|
|
|
|
|
final dynamic cache = await Storage.getString(titles[permission]!);
|
|
|
|
|
|
final bool isGranted = await getPermissionStatus(permissions);
|
2024-05-15 17:17:30 +08:00
|
|
|
|
if (GetPlatform.isAndroid && !isGranted && cache is! String) {
|
2024-04-18 17:41:14 +08:00
|
|
|
|
application = await showCupertinoDialog(
|
|
|
|
|
|
context: Get.context!,
|
2024-05-22 10:33:07 +08:00
|
|
|
|
builder: (BuildContext context) {
|
2024-04-18 17:41:14 +08:00
|
|
|
|
return PopScope(
|
|
|
|
|
|
canPop: false,
|
|
|
|
|
|
child: CupertinoAlertDialog(
|
|
|
|
|
|
title: Text('${'申请'.tr}${titles[permission] ?? ''}${'权限'.tr}'),
|
|
|
|
|
|
content: Text(contents[permission] ?? ''),
|
2024-05-22 10:33:07 +08:00
|
|
|
|
actions: <Widget>[
|
2024-04-18 17:41:14 +08:00
|
|
|
|
CupertinoDialogAction(
|
|
|
|
|
|
child: Text('不允许'.tr),
|
|
|
|
|
|
onPressed: () {
|
2024-09-30 16:31:29 +08:00
|
|
|
|
BuglyTool.uploadExceptionWithEvent(eventStr: '${'申请'.tr}${titles[permission] ?? ''}${'权限'.tr}', detail: "不允许'${'申请'.tr}${titles[permission] ?? ''}${'权限'.tr} titles:$titles'");
|
2024-04-18 17:41:14 +08:00
|
|
|
|
Get.back(result: false);
|
|
|
|
|
|
},
|
|
|
|
|
|
),
|
|
|
|
|
|
CupertinoDialogAction(
|
|
|
|
|
|
child: Text('允许'.tr),
|
|
|
|
|
|
onPressed: () {
|
2024-09-30 16:31:29 +08:00
|
|
|
|
BuglyTool.uploadExceptionWithEvent(eventStr: '${'申请'.tr}${titles[permission] ?? ''}${'权限'.tr}', detail: "不允许'${'申请'.tr}${titles[permission] ?? ''}${'权限'.tr} titles:$titles'");
|
2024-04-18 17:41:14 +08:00
|
|
|
|
Get.back(result: true);
|
|
|
|
|
|
},
|
|
|
|
|
|
),
|
|
|
|
|
|
],
|
|
|
|
|
|
));
|
|
|
|
|
|
},
|
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
|
|
if (application) {
|
2024-05-22 10:33:07 +08:00
|
|
|
|
await Storage.setString(titles[permission]!, titles[permission]);
|
2024-04-18 17:41:14 +08:00
|
|
|
|
}
|
2024-05-15 17:17:30 +08:00
|
|
|
|
} else if (cache is! String) {
|
2024-05-22 10:33:07 +08:00
|
|
|
|
await Storage.setString(titles[permission]!, titles[permission]);
|
2024-05-15 17:17:30 +08:00
|
|
|
|
} else {
|
2024-05-22 10:33:07 +08:00
|
|
|
|
final bool isGranted = await getPermissionStatus(permissions);
|
2024-05-15 17:17:30 +08:00
|
|
|
|
if (!isGranted) {
|
2024-04-18 17:41:14 +08:00
|
|
|
|
showSet(permission);
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
if (application) {
|
2024-05-15 17:17:30 +08:00
|
|
|
|
await permissions.request();
|
2024-05-22 10:33:07 +08:00
|
|
|
|
final bool isGranted = await getPermissionStatus(permissions);
|
2024-05-15 17:17:30 +08:00
|
|
|
|
return isGranted;
|
2024-04-18 17:41:14 +08:00
|
|
|
|
}
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2024-05-14 13:56:29 +08:00
|
|
|
|
//相册
|
|
|
|
|
|
static Future<bool> requestPhotos() async {
|
|
|
|
|
|
if (Get.context == null) {
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
2024-05-22 10:33:07 +08:00
|
|
|
|
final bool isAndroid33 =
|
2024-05-14 13:56:29 +08:00
|
|
|
|
AppPlatform.isAndroid && AppPlatform.getSdkIntValue() >= 33;
|
|
|
|
|
|
|
|
|
|
|
|
//通用的局部函数
|
|
|
|
|
|
List<Permission> requestPermission() {
|
|
|
|
|
|
List<Permission> permissions;
|
|
|
|
|
|
if (isAndroid33) {
|
2024-05-22 10:33:07 +08:00
|
|
|
|
permissions = <Permission>[
|
2024-05-14 13:56:29 +08:00
|
|
|
|
Permission.mediaLibrary,
|
|
|
|
|
|
Permission.photos,
|
|
|
|
|
|
Permission.videos,
|
|
|
|
|
|
];
|
|
|
|
|
|
} else {
|
2024-05-22 10:33:07 +08:00
|
|
|
|
permissions = <Permission>[
|
2024-05-14 13:56:29 +08:00
|
|
|
|
Permission.storage,
|
|
|
|
|
|
];
|
|
|
|
|
|
}
|
|
|
|
|
|
return permissions;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
Future<bool> permissionStatus(List<Permission> permissions) async {
|
|
|
|
|
|
bool isGranted = true;
|
2024-05-22 10:33:07 +08:00
|
|
|
|
for (final Permission permission in permissions) {
|
2024-05-14 13:56:29 +08:00
|
|
|
|
isGranted =
|
|
|
|
|
|
isGranted && (await permission.status) == PermissionStatus.granted;
|
|
|
|
|
|
}
|
|
|
|
|
|
if (isAndroid33) {
|
|
|
|
|
|
// android 33以上需要申请媒体库权限
|
|
|
|
|
|
isGranted =
|
|
|
|
|
|
(await Permission.mediaLibrary.status) == PermissionStatus.granted;
|
|
|
|
|
|
}
|
|
|
|
|
|
return isGranted;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
bool application = true;
|
2024-05-22 10:33:07 +08:00
|
|
|
|
const Permission permission = Permission.photos;
|
|
|
|
|
|
final List<Permission> permissions = requestPermission();
|
|
|
|
|
|
final dynamic cache = await Storage.getString(titles[permission]??'');
|
|
|
|
|
|
final bool isGranted = await permissionStatus(permissions);
|
2024-05-14 13:56:29 +08:00
|
|
|
|
if (AppPlatform.isAndroid && !isGranted && cache is! String) {
|
|
|
|
|
|
application = await showCupertinoDialog(
|
|
|
|
|
|
context: Get.context!,
|
2024-05-22 10:33:07 +08:00
|
|
|
|
builder: (BuildContext context) {
|
2024-05-14 13:56:29 +08:00
|
|
|
|
return PopScope(
|
|
|
|
|
|
canPop: false,
|
|
|
|
|
|
child: CupertinoAlertDialog(
|
|
|
|
|
|
title: Text('${'申请'.tr}${titles[permission] ?? ''}${'权限'.tr}'),
|
|
|
|
|
|
content: Text(contents[permission] ?? ''),
|
2024-05-22 10:33:07 +08:00
|
|
|
|
actions: <Widget>[
|
2024-05-14 13:56:29 +08:00
|
|
|
|
CupertinoDialogAction(
|
|
|
|
|
|
child: Text('不允许'.tr),
|
|
|
|
|
|
onPressed: () {
|
|
|
|
|
|
Get.back(result: false);
|
|
|
|
|
|
},
|
|
|
|
|
|
),
|
|
|
|
|
|
CupertinoDialogAction(
|
|
|
|
|
|
child: Text('允许'.tr),
|
|
|
|
|
|
onPressed: () {
|
|
|
|
|
|
Get.back(result: true);
|
|
|
|
|
|
},
|
|
|
|
|
|
),
|
|
|
|
|
|
],
|
|
|
|
|
|
));
|
|
|
|
|
|
},
|
|
|
|
|
|
);
|
|
|
|
|
|
if (application) {
|
2024-05-22 10:33:07 +08:00
|
|
|
|
await Storage.setString(titles[permission]!, titles[permission]);
|
2024-05-16 11:41:28 +08:00
|
|
|
|
}
|
|
|
|
|
|
} else if (cache is String) {
|
2024-05-22 10:33:07 +08:00
|
|
|
|
final bool isDenied = !(await permissionStatus(permissions));
|
2024-05-16 11:41:28 +08:00
|
|
|
|
if (isDenied) {
|
|
|
|
|
|
showSet(permission);
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
if (application) {
|
2024-05-22 10:33:07 +08:00
|
|
|
|
final Map<Permission, PermissionStatus> statuses = await permissions.request();
|
|
|
|
|
|
final bool isGranted = await permissionStatus(statuses.keys.toList());
|
2024-05-16 11:41:28 +08:00
|
|
|
|
return isGranted;
|
|
|
|
|
|
}
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//读写
|
|
|
|
|
|
static Future<bool> requestStorage() async {
|
|
|
|
|
|
if (Get.context == null) {
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
2024-05-22 10:33:07 +08:00
|
|
|
|
final bool isAndroid33 =
|
2024-05-16 11:41:28 +08:00
|
|
|
|
AppPlatform.isAndroid && AppPlatform.getSdkIntValue() >= 33;
|
|
|
|
|
|
|
|
|
|
|
|
//通用的局部函数
|
|
|
|
|
|
List<Permission> requestPermission() {
|
|
|
|
|
|
List<Permission> permissions;
|
|
|
|
|
|
if (isAndroid33) {
|
2024-05-22 10:33:07 +08:00
|
|
|
|
permissions = <Permission>[
|
2024-05-16 11:41:28 +08:00
|
|
|
|
Permission.mediaLibrary,
|
|
|
|
|
|
Permission.photos,
|
|
|
|
|
|
// Permission.audio,
|
|
|
|
|
|
Permission.videos,
|
|
|
|
|
|
Permission.manageExternalStorage,
|
|
|
|
|
|
];
|
|
|
|
|
|
} else {
|
2024-05-22 10:33:07 +08:00
|
|
|
|
permissions = <Permission>[
|
2024-05-16 11:41:28 +08:00
|
|
|
|
Permission.storage,
|
|
|
|
|
|
];
|
|
|
|
|
|
}
|
|
|
|
|
|
return permissions;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
Future<bool> permissionStatus(List<Permission> permissions) async {
|
|
|
|
|
|
bool isGranted = true;
|
2024-05-22 10:33:07 +08:00
|
|
|
|
for (final Permission permission in permissions) {
|
2024-05-16 11:41:28 +08:00
|
|
|
|
isGranted =
|
|
|
|
|
|
isGranted && (await permission.status) == PermissionStatus.granted;
|
|
|
|
|
|
}
|
|
|
|
|
|
if (isAndroid33) {
|
|
|
|
|
|
// android 33以上需要申请媒体库权限
|
|
|
|
|
|
isGranted = (await Permission.mediaLibrary.status) ==
|
|
|
|
|
|
PermissionStatus.granted ||
|
|
|
|
|
|
(await Permission.manageExternalStorage.status) ==
|
|
|
|
|
|
PermissionStatus.granted;
|
|
|
|
|
|
}
|
|
|
|
|
|
return isGranted;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
bool application = true;
|
2024-09-24 09:55:54 +08:00
|
|
|
|
const Permission permission = Permission.storage;
|
2024-05-22 10:33:07 +08:00
|
|
|
|
final List<Permission> permissions = requestPermission();
|
|
|
|
|
|
final dynamic cache = await Storage.getString(titles[permission]??'');
|
|
|
|
|
|
final bool isGranted = await permissionStatus(permissions);
|
2024-05-16 11:41:28 +08:00
|
|
|
|
if (AppPlatform.isAndroid && !isGranted && cache is! String) {
|
|
|
|
|
|
application = await showCupertinoDialog(
|
|
|
|
|
|
context: Get.context!,
|
2024-05-22 10:33:07 +08:00
|
|
|
|
builder: (BuildContext context) {
|
2024-05-16 11:41:28 +08:00
|
|
|
|
return PopScope(
|
|
|
|
|
|
canPop: false,
|
|
|
|
|
|
child: CupertinoAlertDialog(
|
|
|
|
|
|
title: Text('${'申请'.tr}${titles[permission] ?? ''}${'权限'.tr}'),
|
|
|
|
|
|
content: Text('需要访问读写权限才能使用手动升级固件'.tr),
|
2024-05-22 10:33:07 +08:00
|
|
|
|
actions: <Widget>[
|
2024-05-16 11:41:28 +08:00
|
|
|
|
CupertinoDialogAction(
|
|
|
|
|
|
child: Text('不允许'.tr),
|
|
|
|
|
|
onPressed: () {
|
|
|
|
|
|
Get.back(result: false);
|
|
|
|
|
|
},
|
|
|
|
|
|
),
|
|
|
|
|
|
CupertinoDialogAction(
|
|
|
|
|
|
child: Text('允许'.tr),
|
|
|
|
|
|
onPressed: () {
|
|
|
|
|
|
Get.back(result: true);
|
|
|
|
|
|
},
|
|
|
|
|
|
),
|
|
|
|
|
|
],
|
|
|
|
|
|
));
|
|
|
|
|
|
},
|
|
|
|
|
|
);
|
|
|
|
|
|
if (application) {
|
2024-05-22 10:33:07 +08:00
|
|
|
|
await Storage.setString(titles[permission]??'', titles[permission]);
|
2024-05-14 13:56:29 +08:00
|
|
|
|
}
|
|
|
|
|
|
} else if (cache is String) {
|
2024-05-22 10:33:07 +08:00
|
|
|
|
final bool isDenied = !(await permissionStatus(permissions));
|
2024-05-14 13:56:29 +08:00
|
|
|
|
if (isDenied) {
|
|
|
|
|
|
showSet(permission);
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
if (application) {
|
2024-05-22 10:33:07 +08:00
|
|
|
|
final Map<Permission, PermissionStatus> statuses = await permissions.request();
|
|
|
|
|
|
final bool isGranted = await permissionStatus(statuses.keys.toList());
|
2024-05-14 13:56:29 +08:00
|
|
|
|
return isGranted;
|
|
|
|
|
|
}
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2024-04-10 09:47:05 +08:00
|
|
|
|
//显示权限判断申请框
|
2024-04-24 16:04:07 +08:00
|
|
|
|
static Future<bool> request(Permission permission, [String? content]) async {
|
2024-08-20 09:53:39 +08:00
|
|
|
|
AppLog.log('context:$content');
|
2024-04-10 09:47:05 +08:00
|
|
|
|
if (Get.context == null) {
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
|
|
|
|
|
bool application = true;
|
2024-05-22 10:33:07 +08:00
|
|
|
|
final PermissionStatus status = await permission.status;
|
|
|
|
|
|
final dynamic cache = await Storage.getString(titles[permission]??'');
|
2024-04-10 15:21:08 +08:00
|
|
|
|
if (AppPlatform.isAndroid && !status.isGranted && cache is! String) {
|
|
|
|
|
|
application = await showCupertinoDialog(
|
2024-04-10 09:47:05 +08:00
|
|
|
|
context: Get.context!,
|
2024-05-22 10:33:07 +08:00
|
|
|
|
builder: (BuildContext context) {
|
2024-04-10 15:21:08 +08:00
|
|
|
|
return PopScope(
|
|
|
|
|
|
canPop: false,
|
|
|
|
|
|
child: CupertinoAlertDialog(
|
2024-04-10 17:18:53 +08:00
|
|
|
|
title: Text('${'申请'.tr}${titles[permission] ?? ''}${'权限'.tr}'),
|
2024-04-24 16:04:07 +08:00
|
|
|
|
content: Text(content ?? contents[permission] ?? ''),
|
2024-05-22 10:33:07 +08:00
|
|
|
|
actions: <Widget>[
|
2024-04-10 15:21:08 +08:00
|
|
|
|
CupertinoDialogAction(
|
2024-04-10 17:18:53 +08:00
|
|
|
|
child: Text('不允许'.tr),
|
2024-04-10 15:21:08 +08:00
|
|
|
|
onPressed: () {
|
2024-09-30 16:31:29 +08:00
|
|
|
|
BuglyTool.uploadExceptionWithEvent(eventStr: '${'申请'.tr}${titles[permission] ?? ''}${'权限'.tr}', detail: "不允许'${'申请'.tr}${titles[permission] ?? ''}${'权限'.tr} titles:$titles'");
|
2024-04-10 15:21:08 +08:00
|
|
|
|
Get.back(result: false);
|
|
|
|
|
|
},
|
|
|
|
|
|
),
|
|
|
|
|
|
CupertinoDialogAction(
|
2024-04-10 17:18:53 +08:00
|
|
|
|
child: Text('允许'.tr),
|
2024-04-10 15:21:08 +08:00
|
|
|
|
onPressed: () {
|
2024-09-30 16:31:29 +08:00
|
|
|
|
BuglyTool.uploadExceptionWithEvent(eventStr: '${'申请'.tr}${titles[permission] ?? ''}${'权限'.tr}', detail: "允许'${'申请'.tr}${titles[permission] ?? ''}${'权限'.tr} titles:$titles'");
|
2024-04-10 15:21:08 +08:00
|
|
|
|
Get.back(result: true);
|
|
|
|
|
|
},
|
|
|
|
|
|
),
|
|
|
|
|
|
],
|
|
|
|
|
|
));
|
2024-04-10 09:47:05 +08:00
|
|
|
|
},
|
|
|
|
|
|
);
|
2024-04-10 17:18:53 +08:00
|
|
|
|
if (application) {
|
2024-05-22 10:33:07 +08:00
|
|
|
|
await Storage.setString(titles[permission]??'', titles[permission]);
|
2024-04-10 15:21:08 +08:00
|
|
|
|
}
|
|
|
|
|
|
} else if (cache is String) {
|
|
|
|
|
|
if (status.isDenied) {
|
|
|
|
|
|
showSet(permission);
|
|
|
|
|
|
return false;
|
|
|
|
|
|
}
|
2024-04-10 09:47:05 +08:00
|
|
|
|
}
|
2024-04-10 15:21:08 +08:00
|
|
|
|
if (application) {
|
2024-05-22 10:33:07 +08:00
|
|
|
|
final PermissionStatus status = await permission.request();
|
2024-04-10 15:21:08 +08:00
|
|
|
|
return status.isGranted;
|
2024-04-10 09:47:05 +08:00
|
|
|
|
}
|
2024-04-10 15:21:08 +08:00
|
|
|
|
return false;
|
2024-04-10 09:47:05 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//显示设置页面
|
|
|
|
|
|
static Future<void> showSet(Permission permission) async {
|
|
|
|
|
|
if (Get.context == null) {
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
2024-04-10 15:21:08 +08:00
|
|
|
|
showCupertinoDialog(
|
2024-04-10 09:47:05 +08:00
|
|
|
|
context: Get.context!,
|
2024-05-22 10:33:07 +08:00
|
|
|
|
builder: (BuildContext context) {
|
2024-04-10 15:21:08 +08:00
|
|
|
|
return PopScope(
|
|
|
|
|
|
canPop: false,
|
|
|
|
|
|
child: CupertinoAlertDialog(
|
2024-04-10 17:18:53 +08:00
|
|
|
|
title: Text('${titles[permission] ?? ''}${'权限被拒绝'.tr}'),
|
2024-04-10 15:21:08 +08:00
|
|
|
|
content: Text(
|
2024-04-10 17:18:53 +08:00
|
|
|
|
'${contents[permission] ?? ''},${'请手动在系统设置中开启'.tr}${titles[permission]}${'权限以继续使用应用'.tr}'),
|
2024-05-22 10:33:07 +08:00
|
|
|
|
actions: <Widget>[
|
2024-04-10 15:21:08 +08:00
|
|
|
|
CupertinoDialogAction(
|
2024-04-10 17:18:53 +08:00
|
|
|
|
child: Text('去设置'.tr),
|
2024-04-10 15:21:08 +08:00
|
|
|
|
onPressed: () {
|
|
|
|
|
|
Get.back(); // 关闭对话框
|
|
|
|
|
|
openAppSettings(); // 打开系统设置页面
|
|
|
|
|
|
},
|
|
|
|
|
|
),
|
|
|
|
|
|
],
|
|
|
|
|
|
));
|
2024-04-10 09:47:05 +08:00
|
|
|
|
},
|
|
|
|
|
|
);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|