How to Add and Manage Custom Permissions in Your FlutterFlow Project

When building mobile apps, certain features - like accessing the camera, location, or photo library - require explicit user permission. FlutterFlow provides a built-in way to configure and customize these permissions, ensuring compliance with iOS App Store and Google Play Store requirements.

This guide walks through enabling built-in permissions, creating custom permissions, crafting permission messages, and ensuring they pass app store reviews.


Why Permissions Matter

Modern mobile operating systems require user consent before allowing apps to access sensitive device capabilities. Without proper permission requests:

  • The feature will not work at runtime.

  • Your app may be rejected during store submission.

  • Users may lose trust in your app if the request seems unclear or intrusive.

Permissions are not just technical requirements - they are also part of the user experience.


Accessing Permission Settings in FlutterFlow

  1. Open your project in FlutterFlow.

  2. In the left-hand menu, navigate to Project Setup > Permissions.

  3. You’ll see a list of available permissions, each with:

    • A toggle to enable or disable it.

    • A field to set the Permission Message.

The screenshot example shows common permissions like Bluetooth, Biometrics, Camera, Location, Photo Library, Notifications, and more.


Enabling Built-in Permissions

To enable a permission (e.g., Camera):

  1. Toggle the switch next to Camera to ON.

  2. Enter a clear, descriptive message in the “Permission Message” field.

Example for Camera:

In order to take a picture or video, this app requires permission to access the camera.

This message is displayed in the system prompt when your app requests access.


Adding a Custom Permission

Sometimes your app may need a permission not listed in the default options.

  1. Click + Add Permission at the bottom of the list.

  2. Enter:

    • Permission Name (e.g., “Background Location”, “Bluetooth LE”).

    • Permission Message explaining why it’s required.

  3. Save your changes.

Custom permissions will appear alongside the built-in ones in your app’s configuration.


Writing Effective Permission Messages

Your message should be:

  • Specific: Clearly state what the feature is and why it’s needed.

  • User-focused: Show the benefit to the user, not just the app.

  • Compliant: Follow Apple and Google guidelines for clarity and purpose.

Bad example: “We need access to your camera.”
Good example: “We use your camera so you can scan QR codes for event check-ins.”


Platform-Specific Guidelines

  • iOS:

    • Apple requires detailed, non-generic permission messages.

    • Messages are stored in the app’s Info.plist file during the build.

    • Avoid abbreviations or vague terms - Apple reviewers check this.

    • Reference Apple’s Permission Prompt Guidelines.

  • Android:

    • Android permissions are declared in AndroidManifest.xml.

    • Some permissions are classified as dangerous (e.g., Location, Contacts) and require runtime requests.

    • Follow Android Permission Documentation for best practices.


Testing Your Permissions

After enabling or adding permissions:

  1. Run the app on both iOS and Android devices/emulators.

  2. Trigger the feature that requires the permission to see if the system prompt appears.

  3. Decline and accept permissions to ensure your app handles both cases gracefully.


Best Practices for Permissions in FlutterFlow

  • Request permissions just before they are needed instead of all at once at startup.

  • Keep your permission list minimal - unnecessary permissions can hurt user trust.

  • Test the flow where users deny permissions and ensure your app displays alternative options or instructions.

  • Use feature flags or conditional UI to hide unavailable features when permissions are denied.

  • Regularly review permissions before each release to remove unused ones.


Common Mistakes to Avoid

  • Requesting too early: Asking for access on the first screen without context can lead to high rejection rates.

  • Generic messages: Vague permission prompts may result in iOS rejection.

  • Over-requesting: Asking for permissions your app doesn’t actively use can get it flagged.

  • Not testing denied flow: If users deny a permission and your app crashes, it can be rejected.


Final Thoughts

Customizing permissions in FlutterFlow is more than flipping a switch - it’s about ensuring compliance, maintaining user trust, and improving your app’s usability. By enabling only the permissions you need, writing clear and user-friendly messages, and testing thoroughly, you can build a smoother experience and reduce the risk of store rejections.

2 Likes