permission_master 0.0.4
permission_master: ^0.0.4 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 and Android 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.xmlconfiguration 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.4
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 camera permission denial
}
}
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 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 {
// Handle storage permission denial
}
}
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);
Navigator.pop(context);
},
child: Text('Deny Camera Permission'),
)
ElevatedButton(
onPressed: () async {
await permissionMaster.openAppSettingsDirectly();
},
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;
});
},
child: Text("Get platform version"),
)
Supported Permissions #
| Permission Type | Android | iOS |
|---|---|---|
| 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.