📖 Flutter Easy Permissions Manager
A simple wrapper around permission_handler that makes requesting permissions in Flutter apps easy and developer-friendly.
- 🚀 Request multiple permissions with a single call
- ⚡ Provides clear error messages when
AndroidManifest.xmlorInfo.plistentries are missing - 🛡️ Helps you avoid common mistakes when handling permissions
- 🖥️ Prints developer-friendly logs with ready-to-copy fixes
✨ Features
- Request single or multiple permissions
- Automatically checks if permissions are declared properly in Android/iOS configs
- Provides ready-to-copy XML/Plist entries when missing
- 🖥️ Logs quick CLI fix command to auto-inject missing permissions
- Clean and minimal API
✅ Permissions Mapping (Android & iOS)
| Permission | Android Manifest | iOS Info.plist |
|---|---|---|
| Camera | <uses-permission android:name="android.permission.CAMERA" /> |
<key>NSCameraUsageDescription</key><string>App needs camera access.</string> |
| Microphone | <uses-permission android:name="android.permission.RECORD_AUDIO" /> |
<key>NSMicrophoneUsageDescription</key><string>App needs mic access.</string> |
| Photos / Videos | <uses-permission android:name="android.permission.READ_MEDIA_IMAGES" /> |
<key>NSPhotoLibraryUsageDescription</key><string>Access to photos.</string> |
| Audio / Music Library | <uses-permission android:name="android.permission.READ_MEDIA_AUDIO" /> |
<key>NSAppleMusicUsageDescription</key><string>Access to music.</string> |
| Location (When in Use) | <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> |
<key>NSLocationWhenInUseUsageDescription</key><string>Access location.</string> |
| Location (Always) | <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" /> |
<key>NSLocationAlwaysAndWhenInUseUsageDescription</key><string>Background location.</string> |
| Bluetooth | <uses-permission android:name="android.permission.BLUETOOTH_CONNECT" /> |
<key>NSBluetoothAlwaysUsageDescription</key><string>Bluetooth access.</string> |
| Contacts | <uses-permission android:name="android.permission.READ_CONTACTS" /> |
<key>NSContactsUsageDescription</key><string>Access to contacts.</string> |
| Calendar | <uses-permission android:name="android.permission.READ_CALENDAR" /> |
<key>NSCalendarsUsageDescription</key><string>Access to calendar.</string> |
| Reminders | (handled via calendar API) | <key>NSRemindersUsageDescription</key><string>Access to reminders.</string> |
| Activity / Sensors | <uses-permission android:name="android.permission.ACTIVITY_RECOGNITION" /> |
<key>NSMotionUsageDescription</key><string>Access to motion sensors.</string> |
| Notifications | (no Android manifest entry) | <key>NSUserNotificationUsageDescription</key><string>Send notifications.</string> |
| SMS | <uses-permission android:name="android.permission.SEND_SMS" /> |
(not allowed in iOS – use MFMessageComposeViewController) |
| Storage (Legacy) | <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> |
<key>NSPhotoLibraryUsageDescription</key><string>Access to photos/media.</string> |
| Ignore Battery Optimizations | <uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" /> |
(not applicable on iOS) |
| System Alert Window | <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /> |
(not applicable on iOS) |
| Request Install Packages | <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" /> |
(not applicable on iOS) |
| Access Media Location | <uses-permission android:name="android.permission.ACCESS_MEDIA_LOCATION" /> |
(not applicable on iOS) |
| Nearby Wi-Fi Devices | <uses-permission android:name="android.permission.NEARBY_WIFI_DEVICES" /> |
(not applicable on iOS) |
🚀 Usage Example
final result = await EasyPermissions.request([
Permission.camera,
Permission.microphone
]);
if (result.allGranted) {
print("✅ All permissions granted!");
} else {
print("❌ Missing: ${result.denied}");
}
⚡ CLI Commands
You can also run the injector manually without waiting for runtime errors.
Inject specific permissions
dart run flutter_easy_permission_manager:auto_inject_permissions -p camera,location
🖥️ Developer Logs & Quick Fix
When a required permission is not declared, the logger will print a detailed fix message:
🚨 Missing Permission Declaration
--------------------------------
❌ Permission: camera
👉 Android:
<uses-permission android:name="android.permission.CAMERA"/>
👉 iOS:
<key>NSCameraUsageDescription</key>
<string>App needs camera access.</string>
👉 Quick fix:
dart run flutter_easy_permission_manager:auto_inject_permissions -p camera,microphone
--------------------------------