permission_service.dart 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. import 'dart:io';
  2. import 'package:permission_handler/permission_handler.dart';
  3. import 'package:sino_med_cloud/core/constants/app_enum.dart';
  4. class PermissionService {
  5. /// 对外统一入口
  6. static Future<PermissionResult> request(
  7. PermissionType type,
  8. ) async {
  9. final permission = _mapPermission(type);
  10. final status = await permission.status;
  11. if (status.isGranted) {
  12. return PermissionResult.granted;
  13. }
  14. final result = await permission.request();
  15. if (result.isGranted) {
  16. return PermissionResult.granted;
  17. }
  18. if (result.isPermanentlyDenied) {
  19. return PermissionResult.permanentlyDenied;
  20. }
  21. return PermissionResult.denied;
  22. }
  23. /// 跳转系统设置
  24. static Future<void> openSetting() async {
  25. await openAppSettings();
  26. }
  27. /// 权限映射(平台差异处理)
  28. static Permission _mapPermission(PermissionType type) {
  29. switch (type) {
  30. case PermissionType.camera:
  31. return Permission.camera;
  32. case PermissionType.microphone:
  33. return Permission.microphone;
  34. case PermissionType.gallery:
  35. if (Platform.isAndroid) {
  36. return Permission.photos;
  37. }
  38. return Permission.photos;
  39. case PermissionType.bluetooth:
  40. if (Platform.isAndroid) {
  41. return Permission.bluetoothConnect;
  42. }
  43. return Permission.bluetooth;
  44. }
  45. }
  46. }