GT Permission
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.0.0
Then run:
flutter pub get
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 -->
Configure ios/Podfile to enable permissions (see documentation for full list).
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