permission_master 0.0.2+1
permission_master: ^0.0.2+1 copied to clipboard
**Permission Master** is a **Flutter** plugin for managing and requesting permissions on **iOS** and **Android**, making development easier.
Permission Master Flutter Plugin #
Overview #
Permission Master is a comprehensive Flutter plugin designed to simplify permission management across iOS, Android, Windows, macOS, Linux, and Web platforms. It provides an intuitive and easy-to-use interface for requesting and checking various system permissions while ensuring a smooth user experience.
Key Features #
- Simplified permission request methods
- Granular permission control
- Context-aware permission dialogs
- Platform-agnostic API
- No manual
AndroidManifest.xml
configuration required
iOS platform requirement (iOS 12.0 and above) Supported platform Android (5.0 to 15)
Installation #
Add to your pubspec.yaml
:
/*
dependencies:
permission_master: ^0.0.3
*/ Or install directly from GitHub:
dependencies:
permission_master:
git:
url: https://github.com/SwanFlutter/permission_master.git
Setup and Initialization #
1. Import the Package #
import 'package:permission_master/permission_master.dart';
2. Set BuildContext (Important for Dialogs) #
class _MyAppState extends State<MyApp> {
@override
void initState() {
super.initState();
// Set context for dialog support
PermissionMaster.setContext(context);
}
}
Comprehensive Permission Methods #
1. Camera Permission #
Future<void> requestCameraAccess() async {
final permissionMaster = PermissionMaster();
final status = await permissionMaster.requestCameraPermission();
if (status == PermissionStatus.granted) {
// Camera access allowed
// Proceed with camera-related functionality
} else if (status == PermissionStatus.openSettings) {
// Permanent denial, suggest opening app settings
await permissionMaster.openAppSettings();
} else {
// Handle permission denial
print('Camera permission denied');
}
}
2. Location Permission #
Future<void> requestLocationAccess() async {
final permissionMaster = PermissionMaster();
final status = await permissionMaster.requestLocationPermission();
switch (status) {
case PermissionStatus.granted:
// Location access allowed
// Start location services
break;
case PermissionStatus.denied:
// User rejected location permission
break;
case PermissionStatus.openSettings:
// Permanent denial, suggest opening app settings
await permissionMaster.openAppSettings();
break;
default:
// Handle error
print('Error requesting location permission');
}
}
3. Storage Permission #
Future<void> requestStorageAccess() async {
final permissionMaster = PermissionMaster();
final status = await permissionMaster.requestStoragePermission();
if (status == PermissionStatus.granted) {
// Read/write files allowed
} else if (status == PermissionStatus.openSettings) {
// Permanent denial, suggest opening app settings
await permissionMaster.openAppSettings();
} else {
print('Storage permission not granted');
}
}
4. Microphone Permission #
Future<void> requestMicrophoneAccess() async {
final permissionMaster = PermissionMaster();
final status = await permissionMaster.requestMicrophonePermission();
if (status == PermissionStatus.granted) {
// Start audio recording
} else if (status == PermissionStatus.openSettings) {
// Permanent denial, suggest opening app settings
await permissionMaster.openAppSettings();
} else {
// Handle microphone access denial
}
}
5. Bluetooth Permission #
Future<void> requestBluetoothAccess() async {
final permissionMaster = PermissionMaster();
final status = await permissionMaster.requestBluetoothPermission();
if (status == PermissionStatus.granted) {
// Enable Bluetooth functionality
} else if (status == PermissionStatus.openSettings) {
// Permanent denial, suggest opening app settings
await permissionMaster.openAppSettings();
} else {
print('Bluetooth permission denied');
}
}
6. Contacts Permission #
Future<void> requestContactsAccess() async {
final permissionMaster = PermissionMaster();
final status = await permissionMaster.requestContactsPermission();
if (status == PermissionStatus.granted) {
// Access contacts
} else if (status == PermissionStatus.openSettings) {
// Permanent denial, suggest opening app settings
await permissionMaster.openAppSettings();
} else {
print('Contacts permission denied');
}
}
7. Notifications Permission #
Future<void> requestNotificationsAccess() async {
final permissionMaster = PermissionMaster();
final status = await permissionMaster.requestNotificationPermission();
if (status == PermissionStatus.granted) {
// Send notifications
} else if (status == PermissionStatus.openSettings) {
// Permanent denial, suggest opening app settings
await permissionMaster.openAppSettings();
} else {
print('Notifications permission denied');
}
}
8. SMS Permission #
Future<void> requestSmsAccess() async {
final permissionMaster = PermissionMaster();
final status = await permissionMaster.requestSmsPermission();
if (status == PermissionStatus.granted) {
// Access SMS
} else if (status == PermissionStatus.openSettings) {
// Permanent denial, suggest opening app settings
await permissionMaster.openAppSettings();
} else {
print('SMS permission denied');
}
}
9. Calendar Permission #
Future<void> requestCalendarAccess() async {
final permissionMaster = PermissionMaster();
final status = await permissionMaster.requestCalendarPermission();
if (status == PermissionStatus.granted) {
// Access calendar
} else if (status == PermissionStatus.openSettings) {
// Permanent denial, suggest opening app settings
await permissionMaster.openAppSettings();
} else {
print('Calendar permission denied');
}
}
10. Phone Permission #
Future<void> requestPhoneAccess() async {
final permissionMaster = PermissionMaster();
final status = await permissionMaster.requestPhonePermission();
if (status == PermissionStatus.granted) {
// Access phone features
} else if (status == PermissionStatus.openSettings) {
// Permanent denial, suggest opening app settings
await permissionMaster.openAppSettings();
} else {
print('Phone permission denied');
}
}
11. Activity Recognition Permission #
Future<void> requestActivityRecognitionAccess() async {
final permissionMaster = PermissionMaster();
final status = await permissionMaster.requestActivityRecognitionPermission();
if (status == PermissionStatus.granted) {
// Access activity recognition
} else if (status == PermissionStatus.openSettings) {
// Permanent denial, suggest opening app settings
await permissionMaster.openAppSettings();
} else {
print('Activity recognition permission denied');
}
}
12. Nearby Devices Permission #
Future<void> requestNearbyDevicesAccess() async {
final permissionMaster = PermissionMaster();
final status = await permissionMaster.requestNearbyDevicesPermission();
if (status == PermissionStatus.granted) {
// Access nearby devices
} else if (status == PermissionStatus.openSettings) {
// Permanent denial, suggest opening app settings
await permissionMaster.openAppSettings();
} else {
print('Nearby devices permission denied');
}
}
13. Multiple Permission Checking #
Future<void> checkMultiplePermissions() async {
final permissionMaster = PermissionMaster();
final statuses = await permissionMaster.checkMultiplePermissions([
PermissionType.camera,
PermissionType.location,
PermissionType.microphone
]);
statuses.forEach((permission, status) {
print('$permission status: $status');
if (status == PermissionStatus.openSettings) {
// Suggest opening app settings for permanently denied permissions
permissionMaster.openAppSettings();
}
});
}
14. Open App Settings #
Future<void> openAppPermissionSettings() async {
final permissionMaster = PermissionMaster();
await permissionMaster.openAppSettings();
}
Custom Permission For Use UI #
ElevatedButton(
onPressed: () async {
await permissionMaster.grantedRequestPermission(PermissionType.camera);
},
child: Text('Request Camera Permission'),
)
ElevatedButton(
onPressed: () async {
await permissionMaster.denyRequestPermission(permission: PermissionType.camera);
print("DENIED");
Navigator.pop(context);
},
child: Text('Deny Camera Permission'),
)
ElevatedButton(
onPressed: () async {
await permissionMaster.openAppSettingsDirectly();
print("App settings opened");
},
child: Text("Open App Settings"),
)
Get Platform Version #
- Example
String? platformVersion;
Text("$platformVersion", style: TextStyle(fontSize: 24.0)),
// Android 13
ElevatedButton(
onPressed: () async {
String version = (await permissionMaster.getPlatformVersion())!;
setState(() {
platformVersion = version;
});
print(platformVersion);
},
child: Text("Get platform version"),
)
Windows Permission Management #
Overview #
Permission Master for Windows provides methods to manage and check permissions specific to the Windows platform.
Key Features #
- Request and check permissions for features like camera, microphone, and location.
- Open app settings for manual permission management.
Example Usage #
final permissionMaster = PermissionMasterWindows();
// Request camera permission
final status = await permissionMaster.requestPermission(PermissionTypeWindows.camera);
if (status == PermissionStatus.granted) {
// Permission granted
}
// Check microphone permission status
final micStatus = await permissionMaster.checkPermissionStatus(PermissionTypeWindows.microphone);
if (micStatus == PermissionStatus.granted) {
// Microphone access allowed
}
// Open app settings
await permissionMaster.openAppSettings();
macOS Permission Management #
Overview #
Permission Master for macOS allows you to request and check permissions for various system features.
Key Features #
- Supports permissions for camera, microphone, location, and more.
- Open app settings for manual permission adjustments.
Example Usage #
final permissionMaster = PermissionMasterMacOs();
// Request location permission
final status = await permissionMaster.requestPermission(PermissionTypeMacOs.location);
if (status == PermissionStatus.granted) {
// Location access allowed
}
// Check camera permission status
final cameraStatus = await permissionMaster.checkPermissionStatus(PermissionTypeMacOs.camera);
if (cameraStatus == PermissionStatus.granted) {
// Camera access allowed
}
// Open app settings
await permissionMaster.openAppSettings();
Linux Permission Management #
Overview #
Permission Master for Linux provides a way to manage permissions on Linux-based systems.
Key Features #
- Request and check permissions for camera, microphone, and other features.
- Open app settings for manual permission management.
Example Usage #
final permissionMaster = PermissionMasterLinux();
// Request microphone permission
final status = await permissionMaster.requestAccess(PermissionTypelinux.camera);
if (status == PermissionStatus.granted) {
// Microphone access allowed
}
// Check storage permission status
final storageStatus = await permissionMaster.checkPermissionStatus('storage');
if (storageStatus == PermissionStatus.granted) {
// Storage access allowed
}
// Open app settings
await permissionMaster.openAppSettings();
Web Permission Management #
Overview #
Permission Master for Web allows you to request and check permissions in a web environment.
Key Features #
- Supports permissions for camera, microphone, location, notifications, and more.
- Uses the web Permissions API for permission management.
Example Usage #
final permissionMaster = PermissionMasterWeb();
// Request camera permission
final status = await permissionMaster.requestPermission('camera');
if (status) {
// Camera access allowed
}
// Check microphone permission status
final micStatus = await permissionMaster.checkPermission('microphone');
if (micStatus) {
// Microphone access allowed
}
// Note: Opening app settings is not supported on the web
Supported Permissions #
Permission Type | Android | iOS | Windows | macOS | Linux | Web |
---|---|---|---|---|---|---|
Camera | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
Location | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
Storage | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ |
Microphone | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
Bluetooth | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ |
Contacts | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ |
Notifications | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
SMS | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
Calendar | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ |
Phone | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ |
Activity Recognition | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ |
Nearby Devices | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ |
Best Practices #
- Always check permission status before performing sensitive operations.
- Provide clear rationales for why permissions are needed.
- Gracefully handle permission denials.
- Use
openAppSettings()
for permanent denials. - Use
checkMultiplePermissions()
to handle multiple permissions at once.
Error Handling #
The plugin returns different status enums:
PermissionStatus.granted
: Permission successfully obtained.PermissionStatus.denied
: Permission rejected by the user.PermissionStatus.openSettings
: Permanent denial, suggest manual settings.PermissionStatus.error
: An error occurred during the permission request.
Conclusion #
Permission Master simplifies cross-platform permission management in Flutter, providing a clean, intuitive API for handling various system permissions with minimal configuration. It ensures a smooth user experience by handling edge cases like permanent denials and providing easy access to app settings for manual permission management.