permission_service.dart 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. import 'package:permission_handler/permission_handler.dart';
  2. /// A service that handles all permission requests and status checks.
  3. class PermissionService {
  4. static const List<Permission> _requiredPermissions = [
  5. Permission.microphone,
  6. ];
  7. /// Checks the status of all required permissions.
  8. Future<Map<Permission, PermissionStatus>> checkAllPermissions() async {
  9. final Map<Permission, PermissionStatus> statuses = {};
  10. for (final permission in _requiredPermissions) {
  11. final status = await permission.status;
  12. statuses[permission] = status;
  13. }
  14. return statuses;
  15. }
  16. /// Checks if a specific permission is granted.
  17. Future<bool> isPermissionGranted(Permission permission) async {
  18. final status = await permission.status;
  19. return status.isGranted;
  20. }
  21. /// Checks if all required permissions are granted.
  22. Future<bool> areAllPermissionsGranted() async {
  23. final statuses = await checkAllPermissions();
  24. final allGranted = statuses.values.every((status) => status.isGranted);
  25. return allGranted;
  26. }
  27. /// Requests a specific permission.
  28. Future<PermissionStatus> requestPermission(Permission permission) async {
  29. final status = await permission.request();
  30. return status;
  31. }
  32. /// Requests all required permissions.
  33. Future<Map<Permission, PermissionStatus>> requestAllPermissions() async {
  34. final Map<Permission, PermissionStatus> results = {};
  35. for (final permission in _requiredPermissions) {
  36. final status = await requestPermission(permission);
  37. results[permission] = status;
  38. }
  39. return results;
  40. }
  41. /// Opens the app settings.
  42. Future<bool> openSettings() async {
  43. return await openAppSettings();
  44. }
  45. /// Returns a list of all required permissions.
  46. List<Permission> getRequiredPermissions() {
  47. return List.unmodifiable(_requiredPermissions);
  48. }
  49. /// Returns a human-readable name for a given [Permission].
  50. String getPermissionName(Permission permission) {
  51. switch (permission) {
  52. case Permission.microphone:
  53. return 'Microphone';
  54. case Permission.camera:
  55. return 'Camera';
  56. case Permission.photos:
  57. return 'Photos';
  58. case Permission.notification:
  59. return 'Notifications';
  60. default:
  61. return permission.toString();
  62. }
  63. }
  64. /// Returns a human-readable description for a given [Permission].
  65. String getPermissionDescription(Permission permission) {
  66. switch (permission) {
  67. case Permission.microphone:
  68. return 'Required for voice conversation with AI';
  69. case Permission.camera:
  70. return 'Required for video features';
  71. case Permission.photos:
  72. return 'Required to save and share media';
  73. case Permission.notification:
  74. return 'Required for alerts and updates';
  75. default:
  76. return 'Required for app functionality';
  77. }
  78. }
  79. /// Returns an icon name for a given [Permission].
  80. String getPermissionIcon(Permission permission) {
  81. switch (permission) {
  82. case Permission.microphone:
  83. return 'mic';
  84. case Permission.camera:
  85. return 'camera_alt';
  86. case Permission.photos:
  87. return 'photo_library';
  88. case Permission.notification:
  89. return 'notifications';
  90. default:
  91. return 'settings';
  92. }
  93. }
  94. }