permission_manager 1.0.0 copy "permission_manager: ^1.0.0" to clipboard
permission_manager: ^1.0.0 copied to clipboard

A Flutter plugin to check and request app permissions on Android and iOS using a unified and simple API.

🚀 permission_manager #

A modern, federated Flutter plugin to manage app permissions across all platforms with a simple, unified API.

This plugin helps you check, request, and listen to permission states without dealing with platform-specific complexity.

📱 Supported Platforms #

Android iOS Web macOS Windows Linux
🚧

✨ Features #

  • 🏗 Federated Architecture: Built using a modern structure for future-proof multi-platform support.
  • Multiple Permissions: Request or check multiple permissions simultaneously.
  • 🖼 Android 13 Media: Granular support for Images, Video, and Audio (with backward compatibility).
  • Real-time Updates: Listen to permission status changes via a stream.
  • 🤖 Android Specialized: Support for Battery Optimization, Overlay, and Exact Alarms.
  • 🍏 iOS Parity: Handles restricted, limited, and not-determined states gracefully.
  • 🛠 Simple API: Single unified class for all operations.

📦 Installation #

Add this to your pubspec.yaml:

dependencies:
  permission_manager: ^1.0.0

Usage #

🔐 Request a Permission #

import 'package:permission_manager/permission_manager.dart';

final status = await PermissionManager.request(
  PermissionManagerPermission.camera,
);

if (status == PermissionManagerStatus.granted) {
  // Permission granted
} else if (status == PermissionManagerStatus.permanentlyDenied) {
  // Open app settings
  await PermissionManager.openAppSettings();
}

Request Multiple Permissions #

final statuses = await PermissionManager.requestMultiple([
  PermissionManagerPermission.camera,
  PermissionManagerPermission.location,
  PermissionManagerPermission.contacts,
]);

print(statuses[PermissionManagerPermission.camera]);

📡 Listen to Status Changes #

PermissionManager.statusStream(PermissionManagerPermission.camera).listen((status) {
  print('Camera status changed to: $status');
});

🔍 Supported Permissions #

Permission Enum Platform Support Description
PermissionManagerPermission.camera All Access to camera device
PermissionManagerPermission.microphone All Access to microphone/audio recording
PermissionManagerPermission.location All Access to device location (While in Use)
PermissionManagerPermission.locationAlways Android/iOS Access to background location
PermissionManagerPermission.contacts All Access to device contacts
PermissionManagerPermission.notifications All System notification access
PermissionManagerPermission.photos All Photo library access
PermissionManagerPermission.storage Android/iOS General storage access (Gallery/Files)
PermissionManagerPermission.phone Android Read phone state
PermissionManagerPermission.bluetooth All Bluetooth access
PermissionManagerPermission.bluetoothScan Android 12+/Web Bluetooth scanning
PermissionManagerPermission.bluetoothConnect Android 12+ Bluetooth connection
PermissionManagerPermission.bluetoothAdvertise Android 12+ Bluetooth advertising
PermissionManagerPermission.nearbyDevices Android 13+ Nearby Wi-Fi/Bluetooth devices
PermissionManagerPermission.calendar All Access to calendar events
PermissionManagerPermission.sms Android Read SMS messages
PermissionManagerPermission.sendSms Android Send SMS messages
PermissionManagerPermission.activityRecognition Android/iOS Fitness/Activity tracking
PermissionManagerPermission.accessMediaLocation Android 10+ Access EXIF location data
PermissionManagerPermission.mediaImages Android 13+ Granular access to images only
PermissionManagerPermission.mediaVideo Android 13+ Granular access to video only
PermissionManagerPermission.mediaAudio Android 13+ Granular access to audio only
PermissionManagerPermission.ignoreBatteryOptimizations Android Requests to bypass battery saving
PermissionManagerPermission.systemAlertWindow Android Display over other apps (Overlay)
PermissionManagerPermission.scheduleExactAlarm Android Schedule precise alarms

🤖 Android Setup #

Add required permissions to your AndroidManifest.xml:

<!-- General -->
<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<uses-permission android:name="android.permission.READ_CONTACTS"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.READ_CALENDAR" />
<uses-permission android:name="android.permission.WRITE_CALENDAR" />

<!-- Bluetooth & Connectivity -->
<uses-permission android:name="android.permission.BLUETOOTH" android:maxSdkVersion="30" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" android:maxSdkVersion="30" />
<uses-permission android:name="android.permission.BLUETOOTH_SCAN" />
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
<uses-permission android:name="android.permission.BLUETOOTH_ADVERTISE" />
<uses-permission android:name="android.permission.NEARBY_WIFI_DEVICES" />

<!-- SMS -->
<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.SEND_SMS" />

<!-- Media & Activity -->
<uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
<uses-permission android:name="android.permission.READ_MEDIA_VIDEO" />
<uses-permission android:name="android.permission.READ_MEDIA_AUDIO" />
<uses-permission android:name="android.permission.ACTIVITY_RECOGNITION" />
<uses-permission android:name="android.permission.ACCESS_MEDIA_LOCATION" />

<!-- Specialized -->
<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS"/>
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
<uses-permission android:name="android.permission.SCHEDULE_EXACT_ALARM"/>

🍎 iOS Setup #

Add usage descriptions to your Info.plist:

<key>NSCameraUsageDescription</key>
<string>Camera access is required</string>
<key>NSMicrophoneUsageDescription</key>
<string>Microphone access is required</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>Photo library access is required</string>
<key>NSContactsUsageDescription</key>
<string>Contacts access is required</string>
<key>NSBluetoothAlwaysUsageDescription</key>
<string>Bluetooth access is required</string>
<key>NSCalendarsUsageDescription</key>
<string>Calendar access is required</string>
<key>NSMotionUsageDescription</key>
<string>Activity recognition is required</string>

📝 License #

This package is available under the MIT License.

👨‍💻 Author #

Manoj Patadiya 📧 Email: [email protected]

1
likes
150
points
--
downloads

Publisher

unverified uploader

Weekly Downloads

A Flutter plugin to check and request app permissions on Android and iOS using a unified and simple API.

Repository (GitHub)
View/report issues

Documentation

API reference

License

MIT (license)

Dependencies

flutter, flutter_web_plugins, plugin_platform_interface, web

More

Packages that depend on permission_manager

Packages that implement permission_manager