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 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 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 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 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(); // 打开系统设置页面 }, ), ], )); }, ); } }