app-starlock/star_lock/lib/permission/permission_dialog.dart

111 lines
4.0 KiB
Dart
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:star_lock/app_settings/app_settings.dart';
import 'package:star_lock/tools/storage.dart';
import 'package:star_lock/translations/trans_lib.dart';
class PermissionDialog {
static Map<Permission, String> titles = {
Permission.camera: TranslationLoader.lanKeys!.permissionDialogCamera!.tr,
Permission.photos: TranslationLoader.lanKeys!.permissionDialogPhotos!.tr,
Permission.storage: TranslationLoader.lanKeys!.permissionDialogStorage!.tr,
Permission.location:
TranslationLoader.lanKeys!.permissionDialogLocation!.tr,
};
static Map<Permission, String> contents = {
Permission.camera:
TranslationLoader.lanKeys!.permissionDialogCameraText!.tr,
Permission.photos: TranslationLoader.lanKeys!.permissionDialogPhotos!.tr,
Permission.storage:
TranslationLoader.lanKeys!.permissionDialogStorageText!.tr,
Permission.location:
TranslationLoader.lanKeys!.permissionDialogLocationText!.tr,
};
//显示权限判断申请框
static Future<bool> request(Permission permission) async {
if (Get.context == null) {
return false;
}
bool application = true;
PermissionStatus status = await permission.status;
dynamic cache = await Storage.getString(titles[permission]);
if (AppPlatform.isAndroid && !status.isGranted && cache is! String) {
application = await showCupertinoDialog(
context: Get.context!,
builder: (context) {
return PopScope(
canPop: false,
child: CupertinoAlertDialog(
title: Text(
'${TranslationLoader.lanKeys!.permissionDialogApplication!.tr}${titles[permission] ?? ''}${TranslationLoader.lanKeys!.permissionDialogAuthority!.tr}'),
content: Text(contents[permission] ?? ''),
actions: [
CupertinoDialogAction(
child: Text(TranslationLoader
.lanKeys!.permissionDialogNotAllowed!.tr),
onPressed: () {
Get.back(result: false);
},
),
CupertinoDialogAction(
child: Text(
TranslationLoader.lanKeys!.permissionDialogAllowed!.tr),
onPressed: () {
Get.back(result: true);
},
),
],
));
},
);
if(application){
await Storage.setString(titles[permission], titles[permission]);
}
} else if (cache is String) {
if (status.isDenied) {
showSet(permission);
return false;
}
}
if (application) {
PermissionStatus status = await permission.request();
return status.isGranted;
}
return false;
}
//显示设置页面
static Future<void> showSet(Permission permission) async {
if (Get.context == null) {
return;
}
showCupertinoDialog(
context: Get.context!,
builder: (context) {
return PopScope(
canPop: false,
child: CupertinoAlertDialog(
title: Text(
'${titles[permission] ?? ''}${TranslationLoader.lanKeys!.permissionDialogPermissionDenied!.tr}'),
content: Text(
'${contents[permission] ?? ''}${TranslationLoader.lanKeys!.permissionDialogOpenPermissions!.tr}${titles[permission]}${TranslationLoader.lanKeys!.permissionDialogCameraText!.tr}'),
actions: [
CupertinoDialogAction(
child: Text(
TranslationLoader.lanKeys!.permissionDialogGoSetUp!.tr),
onPressed: () {
Get.back(); // 关闭对话框
openAppSettings(); // 打开系统设置页面
},
),
],
));
},
);
}
}