{"id":16401723,"url":"https://github.com/dev-hwang/permission_request_page","last_synced_at":"2025-10-26T16:31:04.875Z","repository":{"id":59159618,"uuid":"531887545","full_name":"Dev-hwang/permission_request_page","owner":"Dev-hwang","description":"A widget that explains and requests why app permissions are needed.","archived":false,"fork":false,"pushed_at":"2024-06-14T06:14:20.000Z","size":137,"stargazers_count":3,"open_issues_count":0,"forks_count":3,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-01-31T21:34:43.647Z","etag":null,"topics":["android","flutter","ios","permission"],"latest_commit_sha":null,"homepage":"https://pub.dev/packages/permission_request_page","language":"Dart","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Dev-hwang.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2022-09-02T10:53:05.000Z","updated_at":"2024-08-20T00:50:58.000Z","dependencies_parsed_at":"2022-09-13T22:52:11.060Z","dependency_job_id":null,"html_url":"https://github.com/Dev-hwang/permission_request_page","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Dev-hwang%2Fpermission_request_page","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Dev-hwang%2Fpermission_request_page/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Dev-hwang%2Fpermission_request_page/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Dev-hwang%2Fpermission_request_page/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Dev-hwang","download_url":"https://codeload.github.com/Dev-hwang/permission_request_page/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":238366830,"owners_count":19460193,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["android","flutter","ios","permission"],"created_at":"2024-10-11T05:44:00.158Z","updated_at":"2025-10-26T16:31:04.536Z","avatar_url":"https://github.com/Dev-hwang.png","language":"Dart","funding_links":[],"categories":[],"sub_categories":[],"readme":"Is it annoying to create a page that explains permissions to users or implement permission request\nfunctionality? If so, try this plugin! This plugin simplifies the implementation of the above\nfeatures. If you don't like the default template, you can customize it using the builder defined\nin `PermissionRequestPage`.\n\n![image](https://user-images.githubusercontent.com/47127353/189646593-de45c0a9-8cab-4cdf-86a3-600fad7f3503.png)\n\n## Getting started\n\nTo use this plugin, add `permission_request_page` as a [dependency in your pubspec.yaml file](https://flutter.io/platform-plugins/). For example:\n\n```yaml\ndependencies:\n  permission_request_page: ^2.0.0\n```\n\n## How to use\n\nDeclare the required permissions in your app.\n\n```dart\nconst List\u003cPermissionData\u003e _kPermission = [\n  PermissionData(\n    permissionType: PermissionType.location,\n    permissionName: 'Location',\n    description: 'Permission for accessing the device\\'s location.',\n    isNecessary: true,\n  ),\n  PermissionData(\n    permissionType: PermissionType.storage,\n    permissionName: 'Storage',\n    description: 'Permission for accessing external storage.',\n    isNecessary: false,\n  ),\n  PermissionData(\n    permissionType: PermissionType.notification,\n    permissionName: 'Notification',\n    description: 'Permission for pushing notifications.',\n    isNecessary: false,\n  ),\n];\n```\n\n```dart\nconst CustomText _kCustomText = CustomText(\n  permissionViewHeaderText: 'The following permissions are required to use the application.',\n  permissionRequestButtonText: 'NEXT',\n  popupTextWhenPermissionDenied: 'To use the application, you must grant the following permissions: ',\n);\n```\n\nWrite an init function to execute when all required permissions are granted.\n\n```dart\nclass _SplashPageState extends State\u003cSplashPage\u003e {\n  Future\u003cInitResult\u003e _initFunction() async {\n    InitResult initResult;\n    try {\n      // Write your app initialization code.\n      initResult = const InitResult(complete: true);\n    } catch (error, stackTrace) {\n      // Write code to handle app initialization errors.\n      initResult =\n          InitResult(complete: false, error: error, stackTrace: stackTrace);\n    }\n\n    // If the complete value of InitResult is true, it navigates to the nextPage.\n    return initResult;\n  }\n\n  @override\n  Widget build(BuildContext context) {\n    // ...\n  }\n}\n```\n\nAdd a PermissionRequestPage widget under Scaffold.\n\n```dart\nclass _SplashPageState extends State\u003cSplashPage\u003e {\n  Future\u003cInitResult\u003e _initFunction() async {\n    // ...\n  }\n\n  @override\n  Widget build(BuildContext context) {\n    return Scaffold(\n      body: PermissionRequestPage(\n        permissions: _kPermission,\n        customText: _kCustomText,\n        initFunction: _initFunction,\n        nextPage: Container(),\n      ),\n    );\n  }\n}\n```\n\nDeclare the permissions to use for each platform.\n\n### :baby_chick: Android\n\n/android/app/src/main/AndroidManifest.xml\n\n```xml\n\u003c!-- PermissionType.calendar --\u003e\n\u003cuses-permission android:name=\"android.permission.READ_CALENDAR\" /\u003e\n\u003cuses-permission android:name=\"android.permission.WRITE_CALENDAR\" /\u003e\n\n\u003c!-- PermissionType.camera --\u003e\n\u003cuses-permission android:name=\"android.permission.CAMERA\" /\u003e\n\n\u003c!-- PermissionType.contacts --\u003e\n\u003cuses-permission android:name=\"android.permission.READ_CONTACTS\" /\u003e\n\u003cuses-permission android:name=\"android.permission.WRITE_CONTACTS\" /\u003e\n\u003cuses-permission android:name=\"android.permission.GET_ACCOUNTS\" /\u003e\n\n\u003c!-- PermissionType.storage --\u003e\n\u003cuses-permission android:name=\"android.permission.READ_EXTERNAL_STORAGE\" /\u003e\n\u003cuses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\" /\u003e\n\n\u003c!-- PermissionType.sms --\u003e\n\u003cuses-permission android:name=\"android.permission.SEND_SMS\" /\u003e\n\u003cuses-permission android:name=\"android.permission.RECEIVE_SMS\" /\u003e\n\u003cuses-permission android:name=\"android.permission.READ_SMS\" /\u003e\n\u003cuses-permission android:name=\"android.permission.RECEIVE_WAP_PUSH\" /\u003e\n\u003cuses-permission android:name=\"android.permission.RECEIVE_MMS\" /\u003e\n\n\u003c!-- PermissionType.phone --\u003e\n\u003cuses-permission android:name=\"android.permission.READ_PHONE_STATE\" /\u003e\n\u003cuses-permission android:name=\"android.permission.CALL_PHONE\" /\u003e\n\u003cuses-permission android:name=\"android.permission.ADD_VOICEMAIL\" /\u003e\n\u003cuses-permission android:name=\"android.permission.USE_SIP\" /\u003e\n\u003cuses-permission android:name=\"android.permission.READ_CALL_LOG\" /\u003e\n\u003cuses-permission android:name=\"android.permission.WRITE_CALL_LOG\" /\u003e\n\u003cuses-permission android:name=\"android.permission.BIND_CALL_REDIRECTION_SERVICE\" /\u003e\n\n\u003c!-- PermissionType.location, PermissionType.locationAlways --\u003e\n\u003cuses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\" /\u003e\n\u003cuses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\" /\u003e\n\u003cuses-permission android:name=\"android.permission.ACCESS_BACKGROUND_LOCATION\" /\u003e\n\n\u003c!-- PermissionType.microphone, PermissionType.speech --\u003e\n\u003cuses-permission android:name=\"android.permission.RECORD_AUDIO\" /\u003e\n\n\u003c!-- PermissionType.accessMediaLocation --\u003e\n\u003cuses-permission android:name=\"android.permission.ACCESS_MEDIA_LOCATION\" /\u003e\n\n\u003c!-- PermissionType.sensors --\u003e\n\u003cuses-permission android:name=\"android.permission.BODY_SENSORS\" /\u003e\n\n\u003c!-- PermissionType.activityRecognition --\u003e\n\u003cuses-permission android:name=\"android.permission.ACTIVITY_RECOGNITION\" /\u003e\n\n\u003c!-- PermissionType.bluetooth --\u003e\n\u003cuses-permission android:name=\"android.permission.BLUETOOTH\" /\u003e\n\u003cuses-permission android:name=\"android.permission.BLUETOOTH_ADMIN\" /\u003e\n\u003cuses-permission android:name=\"android.permission.BLUETOOTH_CONNECT\" /\u003e\n\u003cuses-permission android:name=\"android.permission.BLUETOOTH_SCAN\" /\u003e\n\n\u003c!-- PermissionType.systemAlertWindow --\u003e\n\u003cuses-permission android:name=\"android.permission.SYSTEM_ALERT_WINDOW\" /\u003e\n```\n\n### :baby_chick: iOS\n\n/ios/Runner/info.plist\n\n```xml\n\u003c!-- PermissionType.calendar --\u003e\n\u003ckey\u003eNSCalendarsUsageDescription\u003c/key\u003e\n\u003cstring\u003edescription\u003c/string\u003e\n\n\u003c!-- PermissionType.camera --\u003e\n\u003ckey\u003eNSCameraUsageDescription\u003c/key\u003e\n\u003cstring\u003edescription\u003c/string\u003e\n\n\u003c!-- PermissionType.contacts --\u003e\n\u003ckey\u003eNSContactsUsageDescription\u003c/key\u003e\n\u003cstring\u003edescription\u003c/string\u003e\n\n\u003c!-- PermissionType.location, PermissionType.locationAlways --\u003e\n\u003ckey\u003eNSLocationWhenInUseUsageDescription\u003c/key\u003e\n\u003cstring\u003edescription\u003c/string\u003e\n\u003ckey\u003eNSLocationAlwaysAndWhenInUseUsageDescription\u003c/key\u003e\n\u003cstring\u003edescription\u003c/string\u003e\n\u003ckey\u003eNSLocationUsageDescription\u003c/key\u003e\n\u003cstring\u003edescription\u003c/string\u003e\n\u003ckey\u003eNSLocationAlwaysUsageDescription\u003c/key\u003e\n\u003cstring\u003edescription\u003c/string\u003e\n\n\u003c!-- PermissionType.microphone --\u003e\n\u003ckey\u003eNSMicrophoneUsageDescription\u003c/key\u003e\n\u003cstring\u003edescription\u003c/string\u003e\n\n\u003c!-- PermissionType.photos --\u003e\n\u003ckey\u003eNSPhotoLibraryUsageDescription\u003c/key\u003e\n\u003cstring\u003edescription\u003c/string\u003e\n\n\u003c!-- PermissionType.mediaLibrary --\u003e\n\u003ckey\u003eNSAppleMusicUsageDescription\u003c/key\u003e\n\u003cstring\u003edescription\u003c/string\u003e\n\u003ckey\u003ekTCCServiceMediaLibrary\u003c/key\u003e\n\u003cstring\u003edescription\u003c/string\u003e\n\n\u003c!-- PermissionType.sensors --\u003e\n\u003ckey\u003eNSMotionUsageDescription\u003c/key\u003e\n\u003cstring\u003edescription\u003c/string\u003e\n\n\u003c!-- PermissionType.speech --\u003e\n\u003ckey\u003eNSSpeechRecognitionUsageDescription\u003c/key\u003e\n\u003cstring\u003edescription\u003c/string\u003e\n\n\u003c!-- PermissionType.reminders --\u003e\n\u003ckey\u003eNSRemindersUsageDescription\u003c/key\u003e\n\u003cstring\u003edescription\u003c/string\u003e\n```\n\n/ios/Podfile\n\n```\npost_install do |installer|\n  installer.pods_project.targets.each do |target|\n  \n    # Add\n    target.build_configurations.each do |config|\n      config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= [\n        '$(inherited)',\n        \n        # See the table below to add macros for permissions to use in your app.\n        'PERMISSION_LOCATION=1',\n        'PERMISSION_NOTIFICATIONS=1'\n      ]\n    end\n\n    flutter_additional_ios_build_settings(target)\n  end\nend\n```\n\n| Permission                  | Info.plist                                                                                                    | Macro                        |\n|-----------------------------|---------------------------------------------------------------------------------------------------------------|------------------------------|\n| PermissionType.calendar     | NSCalendarsUsageDescription                                                                                   | PERMISSION_EVENTS            |\n| PermissionType.reminders    | NSRemindersUsageDescription                                                                                   | PERMISSION_REMINDERS         |\n| PermissionType.contacts     | NSContactsUsageDescription                                                                                    | PERMISSION_CONTACTS          |\n| PermissionType.camera       | NSCameraUsageDescription                                                                                      | PERMISSION_CAMERA            |\n| PermissionType.microphone   | NSMicrophoneUsageDescription                                                                                  | PERMISSION_MICROPHONE        |\n| PermissionType.speech       | NSSpeechRecognitionUsageDescription                                                                           | PERMISSION_SPEECH_RECOGNIZER |\n| PermissionType.photos       | NSPhotoLibraryUsageDescription                                                                                | PERMISSION_PHOTOS            |\n| PermissionType.location     | NSLocationUsageDescription, NSLocationAlwaysAndWhenInUseUsageDescription, NSLocationWhenInUseUsageDescription | PERMISSION_LOCATION          |\n| PermissionType.notification | PermissionGroupNotification                                                                                   | PERMISSION_NOTIFICATIONS     |\n| PermissionType.mediaLibrary | NSAppleMusicUsageDescription, kTCCServiceMediaLibrary                                                         | PERMISSION_MEDIA_LIBRARY     |\n| PermissionType.sensors      | NSMotionUsageDescription                                                                                      | PERMISSION_SENSORS           |\n| PermissionType.bluetooth    | NSBluetoothAlwaysUsageDescription, NSBluetoothPeripheralUsageDescription                                      | PERMISSION_BLUETOOTH         |\n\n## Support\n\nIf you find any bugs or issues while using the plugin, please register an issues on [GitHub](https://github.com/Dev-hwang/permission_request_page/issues). You can also contact us at \u003chwj930513@naver.com\u003e.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdev-hwang%2Fpermission_request_page","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdev-hwang%2Fpermission_request_page","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdev-hwang%2Fpermission_request_page/lists"}