Managing permissions in Flutter apps can quickly become complex β especially when supporting multiple platforms like Android, iOS, Web, and Desktop.
Handling platform differences, permission states, and new OS changes often results in messy and repetitive code.
So I built a modern federated Flutter plugin:
π permission_manager
A simple, unified API to check, request, and listen to permission states without dealing with platform-specific complexity.
π https://pub.dev/packages/permission_manager
π± Why Another Permission Plugin?
While building real-world Flutter applications, I faced several common problems:
β
Different permission behaviors across platforms
β
Complex platform-specific implementations
β
Managing multiple permissions at once
β
Handling new Android permission models (Android 13 media permissions)
β
Listening to permission state changes in real-time
I wanted something:
1) Clean
2) Modern architecture
3) Cross-platform ready
4) Easy to maintain
β¨ Key Features
π₯ Federated architecture for future-proof multi-platform support
π₯ Single unified API for all permissions
π₯ Request multiple permissions at once
π₯ Real-time permission status stream
π₯ Android specialized permissions support:
1) Battery optimization
2) Overlay (draw over apps)
3) Exact alarms
π₯ Full iOS permission state handling (restricted, limited, etc.)
π₯ Android 13 granular media permission support
π₯ Swift Package Manager support (iOS/macOS)
π₯ Fully documented API
π± Supported Platforms
β
Android
β
iOS
β
Web
β
macOS
β
Windows
β
Linux
β‘ Quick Example
import 'package:permission_manager/permission_manager.dart';
final status = await PermissionManager.request(
PermissionManagerPermission.camera,
);
if (status == PermissionManagerStatus.granted) {
// Permission granted
}
π₯ Request Multiple Permissions
final statuses = await PermissionManager.requestMultiple([
PermissionManagerPermission.camera,
PermissionManagerPermission.location,
]);
π Listen to Permission Changes
PermissionManager.statusStream(
PermissionManagerPermission.camera
).listen((status) {
print(status);
});
Top comments (1)
If you are currently using permission_handler or another plugin, what features do you feel are missing or complicated?
Iβm continuously improving permission_manager based on developer feedback, so suggestions are highly welcome π