GT Permission

pub package License: MIT

A comprehensive Flutter permission handler utility with singleton pattern, platform-specific version handling, and user-friendly result objects for all iOS and Android permissions.

Features

  • 🔐 Singleton Pattern - Easy access throughout your app
  • 📱 Platform-Specific Handling - Android 13+, iOS 14+ version-aware
  • 📊 Rich Result Objects - Detailed status info with user-friendly messages
  • 🎨 Adaptive Dialogs - Material (Android) and Cupertino (iOS) dialogs
  • 40+ Permission Methods - Camera, location, storage, Bluetooth, notifications, and more
  • 🔄 Smart Fallbacks - Handles legacy and modern permission APIs

Installation

Add to your pubspec.yaml:

dependencies:
  gt_permission: ^1.1.0

Then run:

flutter pub get

Compatibility & iOS Swift Package Manager (SPM)

This package is fully compatible with Flutter 3.44.2+ and Dart 3.12.2+.

For iOS, the dependency management utilizes Swift Package Manager (SPM). If you are migrating your iOS app to SPM:

  1. Ensure your iOS minimum deployment target is set to iOS 15.0 or higher.
  2. Enable SPM in Flutter: flutter config --enable-swift-package-manager
  3. Run flutter build ios --config-only to configure the Swift Package Manager setup.

Platform Setup

Android

Add permissions to android/app/src/main/AndroidManifest.xml:

<!-- Common permissions -->
<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
<!-- Add more as needed - see PERMISSION.md for complete list -->

iOS

Add to ios/Runner/Info.plist:

<key>NSCameraUsageDescription</key>
<string>We need camera access to take photos</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>We need photo library access to select photos</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>We need your location while using the app</string>
<!-- Add more as needed -->

Under Swift Package Manager, the underlying permission_handler library scans your Info.plist at build time and automatically compiles in only the permissions for which usage descriptions are declared. No manual Podfile modification is required.

Quick Start

Request Single Permission

import 'package:gt_permission/gt_permission.dart';

final permissionUtil = PermissionHandlerUtil.instance;

// Request camera permission
final result = await permissionUtil.requestCameraPermission();

if (result.isGranted) {
  // Permission granted - open camera
  print('Camera access granted!');
} else if (result.isPermanentlyDenied) {
  // Show dialog to open settings
  await permissionUtil.openAppSettings();
} else {
  // Permission denied
  print('Denied: ${result.message}');
}

Request Multiple Permissions

final statuses = await permissionUtil.requestMultiplePermissions([
  Permission.camera,
  Permission.microphone,
  Permission.storage,
]);

bool allGranted = statuses.values.every((s) => s.isGranted);

Check Permission Status

bool hasCamera = await permissionUtil.isPermissionGranted(Permission.camera);
bool isPermanentlyDenied = await permissionUtil.isPermissionPermanentlyDenied(Permission.location);

Show Platform-Adaptive Dialog

import 'package:gt_permission/gt_permission.dart';

await PermissionDialogUtils.showResultDialog(
  context,
  result,  // PermissionRequestResult
  Permission.camera,
);

Available Permission Methods

Method Description
requestCameraPermission() Camera access
requestMicrophonePermission() Microphone/audio recording
requestLocationPermission() Foreground location
requestLocationAlwaysPermission() Background location
requestPhotosPermission() Photo library (Android 13+: READ_MEDIA_IMAGES)
requestVideosPermission() Video access (Android 13+)
requestStoragePermission() Storage (version-aware)
requestNotificationPermission() Push notifications
requestBluetoothPermission() Bluetooth (version-aware)
requestContactsPermission() Contacts access
requestCalendarPermission() Calendar events

...and many more! See documentation for complete list.

PermissionRequestResult

Every request returns a PermissionRequestResult with:

result.isGranted          // Permission granted
result.isDenied           // Denied but can request again
result.isPermanentlyDenied // Must open settings
result.isLimited          // Limited access (iOS 14+ photos)
result.message            // User-friendly message
result.shouldOpenSettings // Suggests opening settings

License

MIT License - see LICENSE for details.

Libraries

gt_permission
GT Permission - A comprehensive Flutter permission handler utility.
permission_handler/advance_permission_utils
permission_handler/permission_dialog