Requesting permissions itself has minimal impact on frame rate or memory. However, improper handling can cause delays or freezes if the app waits synchronously for user response. Frequent or repeated permission requests can annoy users and degrade experience. Battery use is negligible unless permissions enable background tasks.
Permissions handling in Flutter - Build, Publish & Deploy
Always request permissions asynchronously without blocking the UI thread. Use Flutter's permission_handler package to check and request permissions efficiently. Cache permission status to avoid redundant requests. Prompt users only when necessary and explain why permissions are needed to reduce denial rates.
Adding permissions handling libraries like permission_handler adds a small increase (~1-2MB) to app size. Declaring permissions in AndroidManifest.xml and Info.plist does not affect size but is required. Startup time is unaffected unless permission checks block app initialization, which should be avoided.
Android requires runtime permission requests for dangerous permissions (e.g., location, camera) starting from Android 6.0. iOS requests permissions at runtime but also requires usage descriptions in Info.plist. iOS permissions are stricter about user privacy and can revoke permissions anytime. Android allows checking if permission is permanently denied to guide users to settings.
- Apple App Store: Must include clear usage descriptions in Info.plist for each permission. Explain why the app needs the permission. Apps requesting sensitive permissions without justification risk rejection.
- Google Play Store: Must declare permissions in AndroidManifest.xml. Apps requesting sensitive permissions must comply with Google Play's permissions policy and provide privacy policy links.
- Both stores require that permissions are requested only when needed and not at app launch without context.
The app might be requesting permissions synchronously on the main thread, causing UI blocking. Or it may be repeatedly requesting permissions without caching status, delaying user interaction. Ensure permission requests are asynchronous and only happen when necessary.