Permission plugin for Flutter. This plugin provides a cross-platform (iOS, Android) API to request and check permissions.

Overview

Flutter permission_handler plugin

The Flutter permission_handler plugin is build following the federated plugin architecture. A detailed explanation of the federated plugin concept can be found in the Flutter documentation. This means the permission_handler plugin is separated into the following packages:

  1. permission_handler: the app facing package. This is the package users depend on to use the plugin in their project. For details on how to use the permission_handler plugin you can refer to its README.md file. At this moment the Android and iOS platform implementations are also part of this package. Additional platform support will be added in their own individual "platform package(s)".
  2. permission_handler_platform_interface: this packages declares the interface which all platform packages must implement to support the app-facing package. Instructions on how to implement a platform packages can be found int the README.md of the permission_handler_platform_interface package.
Comments
  • Apple rejects all binaries built using this package, unless ALL permissions have purposes/reasons added in the .plist, even if the app is not using most of them...

    Apple rejects all binaries built using this package, unless ALL permissions have purposes/reasons added in the .plist, even if the app is not using most of them...

    Apple now rejects all apps, the error is as follows:

    Missing Purpose String in Info.plist File - Your app's code references one or more APIs that access sensitive user data. The app's Info.plist file should contain a NSContactsUsageDescription key with a user-facing purpose string explaining clearly and completely why your app needs the data. Starting Spring 2019, all apps submitted to the App Store that access user data will be required to include a purpose string.If you're using external libraries or SDKs, they may reference APIs that require a purpose string. While your app might not use these APIs, a purpose string is still required. You can contact the developer of the library or SDK and request they release a version of their code that doesn't contain the APIs. Learn more (https://developer.apple.com/documentation/uikit/core_app/protecting_the_user_s_privacy).

    Missing Purpose String in Info.plist File - Your app's code references one or more APIs that access sensitive user data. The app's Info.plist file should contain a NSCalendarsUsageDescription key with a user-facing purpose string explaining clearly and completely why your app needs the data. Starting Spring 2019, all apps submitted to the App Store that access user data will be required to include a purpose string.If you're using external libraries or SDKs, they may reference APIs that require a purpose string. While your app might not use these APIs, a purpose string is still required. You can contact the developer of the library or SDK and request they release a version of their code that doesn't contain the APIs. Learn more (https://developer.apple.com/documentation/uikit/core_app/protecting_the_user_s_privacy).

    Missing Purpose String in Info.plist File - Your app's code references one or more APIs that access sensitive user data. The app's Info.plist file should contain a NSAppleMusicUsageDescription key with a user-facing purpose string explaining clearly and completely why your app needs the data. Starting Spring 2019, all apps submitted to the App Store that access user data will be required to include a purpose string.If you're using external libraries or SDKs, they may reference APIs that require a purpose string. While your app might not use these APIs, a purpose string is still required. You can contact the developer of the library or SDK and request they release a version of their code that doesn't contain the APIs. Learn more (https://developer.apple.com/documentation/uikit/core_app/protecting_the_user_s_privacy).

    Missing Purpose String in Info.plist File - Your app's code references one or more APIs that access sensitive user data. The app's Info.plist file should contain a NSMotionUsageDescription key with a user-facing purpose string explaining clearly and completely why your app needs the data. Starting Spring 2019, all apps submitted to the App Store that access user data will be required to include a purpose string.If you're using external libraries or SDKs, they may reference APIs that require a purpose string. While your app might not use these APIs, a purpose string is still required. You can contact the developer of the library or SDK and request they release a version of their code that doesn't contain the APIs. Learn more (https://developer.apple.com/documentation/uikit/core_app/protecting_the_user_s_privacy).

    Missing Purpose String in Info.plist File - Your app's code references one or more APIs that access sensitive user data. The app's Info.plist file should contain a NSSpeechRecognitionUsageDescription key with a user-facing purpose string explaining clearly and completely why your app needs the data. Starting Spring 2019, all apps submitted to the App Store that access user data will be required to include a purpose string.If you're using external libraries or SDKs, they may reference APIs that require a purpose string. While your app might not use these APIs, a purpose string is still required. You can contact the developer of the library or SDK and request they release a version of their code that doesn't contain the APIs. Learn more (https://developer.apple.com/documentation/uikit/core_app/protecting_the_user_s_privacy).

    opened by manuelgomes2 63
  • iOS Build fails with multiple errors

    iOS Build fails with multiple errors

    🐛 Bug Report

    With today's update to 5.1.0+2, all of our iOS builds are failing.

    Xcode's output:
    ↳
        /Users/vagrant/.pub-cache/hosted/pub.dartlang.org/permission_handler-5.1.0+2/ios/Classes/strategies/PhotoPermissionStrategy.m:40:81: error: use of undeclared identifier 'PHAccessLevelAddOnly'
                [PHPhotoLibrary requestAuthorizationForAccessLevel:(addOnlyAccessLevel)?PHAccessLevelAddOnly:PHAccessLevelReadWrite handler:^(PHAuthorizationStatus authorizationStatus) {
                                                                                        ^
        /Users/vagrant/.pub-cache/hosted/pub.dartlang.org/permission_handler-5.1.0+2/ios/Classes/strategies/PhotoPermissionStrategy.m:40:102: error: use of undeclared identifier 'PHAccessLevelReadWrite'
                [PHPhotoLibrary requestAuthorizationForAccessLevel:(addOnlyAccessLevel)?PHAccessLevelAddOnly:PHAccessLevelReadWrite handler:^(PHAuthorizationStatus authorizationStatus) {
                                                                                                             ^
        /Users/vagrant/.pub-cache/hosted/pub.dartlang.org/permission_handler-5.1.0+2/ios/Classes/strategies/PhotoPermissionStrategy.m:53:89: error: use of undeclared identifier 'PHAccessLevelAddOnly'
                status = [PHPhotoLibrary authorizationStatusForAccessLevel:(addOnlyAccessLevel)?PHAccessLevelAddOnly:PHAccessLevelReadWrite];
                                                                                                ^
        /Users/vagrant/.pub-cache/hosted/pub.dartlang.org/permission_handler-5.1.0+2/ios/Classes/strategies/PhotoPermissionStrategy.m:53:110: error: use of undeclared identifier 'PHAccessLevelReadWrite'
                status = [PHPhotoLibrary authorizationStatusForAccessLevel:(addOnlyAccessLevel)?PHAccessLevelAddOnly:PHAccessLevelReadWrite];
                                                                                                                     ^
        /Users/vagrant/.pub-cache/hosted/pub.dartlang.org/permission_handler-5.1.0+2/ios/Classes/strategies/PhotoPermissionStrategy.m:71:14: error: use of undeclared identifier 'PHAuthorizationStatusLimited'; did you mean 'PHAuthorizationStatusDenied'?
                case PHAuthorizationStatusLimited:
                     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
                     PHAuthorizationStatusDenied
        In module 'Photos' imported from /Users/vagrant/.pub-cache/hosted/pub.dartlang.org/permission_handler-5.1.0+2/ios/Classes/strategies/PhotoPermissionStrategy.h:11:
        /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS13.5.sdk/System/Library/Frameworks/Photos.framework/Headers/PHPhotoLibrary.h:22:5: note: 'PHAuthorizationStatusDenied' declared here
            PHAuthorizationStatusDenied,            // User has explicitly denied this application access to photos data.
            ^
        /Users/vagrant/.pub-cache/hosted/pub.dartlang.org/permission_handler-5.1.0+2/ios/Classes/strategies/PhotoPermissionStrategy.m:71:14: error: duplicate case value 'PHAuthorizationStatusDenied'
                case PHAuthorizationStatusLimited:
                     ^
        /Users/vagrant/.pub-cache/hosted/pub.dartlang.org/permission_handler-5.1.0+2/ios/Classes/strategies/PhotoPermissionStrategy.m:67:14: note: previous case defined here
                case PHAuthorizationStatusDenied:
                     ^
        6 errors generated.
    

    Expected behavior

    App should build

    Reproduction steps

    Note that we are using Bitrise CI/CD for consistent builds. This error occurs in every build we attempt.

    Configuration

    This is a pretty large app, so lots of variables here, not sure what is needed - let me know.

    pubspec.yaml is looking for: permission_handler: ^5.0.0+hotfix.6

    Podfile includes:

    post_install do |installer|
      installer.pods_project.targets.each do |target|
        target.build_configurations.each do |config|
          config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '9.0'
          config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= [
            '$(inherited)',
            ## dart: PermissionGroup.calendar
            'PERMISSION_EVENTS=0',
            ## dart: PermissionGroup.reminders
            'PERMISSION_REMINDERS=0',
            ## dart: PermissionGroup.contacts
            'PERMISSION_CONTACTS=0',
            ## dart: PermissionGroup.microphone
            'PERMISSION_MICROPHONE=0',
            ## dart: PermissionGroup.speech
            'PERMISSION_SPEECH_RECOGNIZER=0',
            ## dart: PermissionGroup.mediaLibrary
            'PERMISSION_MEDIA_LIBRARY=0',
            ## dart: PermissionGroup.sensors
            'PERMISSION_SENSORS=0'
          ]
        end
        flutter_additional_ios_build_settings(target)
      end
    end
    

    Version: permission_handler: 5.1.0+2 flutter: 1.22.4

    Platform:

    • [x] :iphone: iOS
    • [ ] :robot: Android
    opened by bryantgtx 41
  • Make API more intuitive

    Make API more intuitive

    First of all: Thanks for this great package! 😊 It's widely adopted for good reasons and I want to congratulate you on that.

    I understand how the API of this package got designed but Dart's introduction of extension methods makes it possible to design a much tighter, more readable API. Here are just some of my ideas:

    Enums: I think the PermissionStatus and ServiceStatus should be enums so that users can switch over the result. Values and other methods can still be defined using extension methods.

    PermissionHandler: I know this is what gives the package its name, but I'm not sure a PermissionHandler is needed at all. Currently, it mainly provides a namespace for all the functions of this package. But they could be defined just as well on the PermissionGroups themselves, which seems much more intuitive to me. status could be a getter, because it doesn't perform an action that the developer or user perceives. Developers still know that some work is involved, because it returns a Future. Also, most of the time you only want to request a single permission, so it makes sense to also provide a method for that.

    current | proposed --- | --- await PermissionHandler() .checkPermissionStatus(PermissionGroup.camera) | await PermissionGroup.camera.status (await PermissionHandler() .requestPermissions([PermissionGroup.camera]))[PermissionGroup.camera] | await PermissionGroup.camera.request() PermissionHandler() .requestPermissions([PermissionGroup.camera, PermissionGroup.storage])) | await [PermissionGroup.camera, PermissionGroup.storage].request()

    Intuitive getters: Sure, users can always check someStatus == PermissionStatus.granted, but someStatus.isGranted seems more intuitive, allowing for (await PermissionGroup.camera.status).isGranted. These getters could not only get implemented on PermissionStatus, but also on Future<PermissionStatus>, allowing even terser syntax: await PermissionGroup.camera.checkStatus().isGranted. To make the API more declarative, maybe these getters could also get directly implemented on PermissionGroups as syntactic sugar for implicitly calling the check() function: await PermissionGroup.camera.isGranted

    Support common patterns: Very often, permissions are checked and if they are denied, a request is made. That could be supported using some requestIfDenied method, that returns the status if the status is not PermissionStatus.denied and otherwise requests the permission from the user and then returns the new status: PermissionGroup.camera.requestIfDenied()

    PermissionGroups? I understand that some of the permissions resemble multiple OS-level permissions, but I think that's an implementation detail that most developers using this API don't really care about. Maybe, PermissionGroup could get renamed to Permission?

    Putting it all together Most of this was trivial syntactic sugar, but putting it all together, it makes for much more terse code. What before looked like this:

    var handler = PermissionHandler();
    var permission = await handler.checkPermissionStatus(PermissionGroup.storage);
    if (permission != PermissionStatus.granted) {
      var permissions = await handler.requestPermissions([PermissionGroup.storage]);
      if (permissions[PermissionGroup.storage] != PermissionStatus.granted) {
        // Do stuff.
      }
    }
    

    could now be as easy as this:

    if (await Permission.storage.requestIfDenied().isGranted) {
      // Do stuff.
    }
    

    Of course, these are breaking changes to the api and require a major version update to 5.0.0. I do think though that the simplicity of that API would be worth it. What do you think about these changes? If you decide on redesigning the API, I'm happy to help to implement the changes.

    platform: android platform: ios status: in progress type: enhancement 
    opened by MarcelGarus 30
  • requestPermission does not return result

    requestPermission does not return result

    🔙 Regression

    List permissions_group = [PermissionGroup.contacts, PermissionGroup.storage];

    Map<PermissionGroup, PermissionStatus> permissions = await PermissionHandler().requestPermissions(permissions_group);

    print(permissions)

    Hi, I tried to run the code above. Unfortunately, I cannot get the result after granting the permission from the dialog. Any suggestion?

    opened by NeroJz 30
  • Android app crashes after permission request popup

    Android app crashes after permission request popup

    🐛 Bug Report

    Android app crashes first time request permission when launching, on both deny and grant action . The app restarts, it works fine then.

    Map<PermissionGroup, PermissionStatus> permissions = await PermissionHandler().requestPermissions([PermissionGroup.location]);

    D/AndroidRuntime( 8448): Shutting down VM
    E/AndroidRuntime( 8448): FATAL EXCEPTION: main
    E/AndroidRuntime( 8448): Process: com.berkey.berkey, PID: 8448
    E/AndroidRuntime( 8448): java.lang.RuntimeException: Failure delivering result ResultInfo{[email protected]:requestPermissions:, request=25, result=-1, data=Intent { act=android.content.pm.action.REQUEST_PERMISSIONS (has extras) }} to activity {com.berkey.berkey/com.berkey.berkey.MainActivity}: java.lang.IllegalStateException: Reply already submitted
    E/AndroidRuntime( 8448): 	at android.app.ActivityThread.deliverResults(ActivityThread.java:4268)
    E/AndroidRuntime( 8448): 	at android.app.ActivityThread.handleSendResult(ActivityThread.java:4312)
    E/AndroidRuntime( 8448): 	at android.app.ActivityThread.-wrap19(Unknown Source:0)
    E/AndroidRuntime( 8448): 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1644)
    E/AndroidRuntime( 8448): 	at android.os.Handler.dispatchMessage(Handler.java:106)
    E/AndroidRuntime( 8448): 	at android.os.Looper.loop(Looper.java:164)
    E/AndroidRuntime( 8448): 	at android.app.ActivityThread.main(ActivityThread.java:6494)
    E/AndroidRuntime( 8448): 	at java.lang.reflect.Method.invoke(Native Method)
    E/AndroidRuntime( 8448): 	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
    E/AndroidRuntime( 8448): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
    E/AndroidRuntime( 8448): Caused by: java.lang.IllegalStateException: Reply already submitted
    E/AndroidRuntime( 8448): 	at io.flutter.view.FlutterNativeView$1.reply(FlutterNativeView.java:174)
    E/AndroidRuntime( 8448): 	at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler$1.success(MethodChannel.java:203)
    E/AndroidRuntime( 8448): 	at com.baseflow.permissionhandler.PermissionHandlerPlugin.processResult(PermissionHandlerPlugin.kt:316)
    E/AndroidRuntime( 8448): 	at com.baseflow.permissionhandler.PermissionHandlerPlugin.handlePermissionsRequest(PermissionHandlerPlugin.kt:308)
    E/AndroidRuntime( 8448): 	at com.baseflow.permissionhandler.PermissionHandlerPlugin.access$handlePermissionsRequest(PermissionHandlerPlugin.kt:28)
    E/AndroidRuntime( 8448): 	at com.baseflow.permissionhandler.PermissionHandlerPlugin$Companion$registerWith$1.onRequestPermissionsResult(PermissionHandlerPlugin.kt:46)
    E/AndroidRuntime( 8448): 	at io.flutter.app.FlutterPluginRegistry.onRequestPermissionsResult(FlutterPluginRegistry.java:191)
    E/AndroidRuntime( 8448): 	at io.flutter.app.FlutterActivityDelegate.onRequestPermissionsResult(FlutterActivityDelegate.java:125)
    E/AndroidRuntime( 8448): 	at io.flutter.app.FlutterActivity.onRequestPermissionsResult(FlutterActivity.java:133)
    E/AndroidRuntime( 8448): 	at android.app.Activity.dispatchRequestPermissionsResult(Activity.java:7429)
    E/AndroidRuntime( 8448): 	at android.app.Activity.dispatchActivityResult(Activity.java:7280)
    E/AndroidRuntime( 8448): 	at android.app.ActivityThread.deliverResults(ActivityThread.java:4264)
    E/AndroidRuntime( 8448): 	... 9 more
    Lost connection to device.
    

    Version: 2.2.0

    Platform:

    • [ ] :iphone: iOS
    • [x ] :robot: Android
    opened by comeonbuddy 28
  • FileSystemException: Cannot open file....(OS Error: Permission denied, errno = 13)

    FileSystemException: Cannot open file....(OS Error: Permission denied, errno = 13)

    I cannot select image from gallery. This is my logcat FileSystemException: Cannot open file, path = '/storage/emulated/0/DCIM/s9camera/Pic_2020_06_04_19_36_15.jpg' (OS Error: Permission denied, errno = 13). I'm using permission_handler package for handle permission. Storage and Access Media Location permission has already granted by user but the issue is generated every time when pick image or video from external storage. Inside manifest file we have added android:requestLegacyExternalStorage="true" Suddenly i get issue on the production app , please support us

    opened by prasantco 27
  • [BUG][iOS] Permission Popup not being displayed

    [BUG][iOS] Permission Popup not being displayed

    On iOS, on either a real or a simulated device, the iOS popup for accepting the permission is not being displayed. On Android everything is working right. On iOS, running the command await permission.request() returns PermissionStatus.undetermined without showing the popup.

    I've strictly followed the steps specified on pub.dev page, on my current project and on a new project created just for this. It use to work in a previous build I've made of the same code about 1 month ago (I don't remember which version of Flutter and PermissionHandler was using).

    My Flutter doctor output is:

    Flutter (Channel stable, 1.20.3, on Mac OS X 10.15.6 ...)
    Android toolchain - develop for Android devices (Android SDK version 30.0.0)
    Xcode - develop for iOS and macOS (Xcode 12.0)
    Android Studio (version 4.0)
    Connected device (1 available)
    
    No issues found!
    

    Anyone has any helpful info? I will gladly give any additional info :)!

    Thank you!

    opened by sajunt4 26
  • PlayStore detects `REQUEST_INSTALL_PACKAGES` even when app never uses it

    PlayStore detects `REQUEST_INSTALL_PACKAGES` even when app never uses it

    Hi, we recently got an inbox from Play Store stating that our app contains REQUEST_INSTALL_PACKAGES permission and that we have to declare this on Play Store. However, the problem is we never use it, no calls made to Permission.requestInstallPackages across our codebase.

    The question is, how do I remove unused permission requests from our app? If currently not possible, is there any suggestion?

    image

    platform: android 
    opened by iandis 24
  • Android Camera permission: Permission.camera.status returns undetermined when it should be permanentlyDenied

    Android Camera permission: Permission.camera.status returns undetermined when it should be permanentlyDenied

    🐛 Bug Report

    Permission.camera.status returns undetermined if called immediately after the user permanentlyDenies the access. In older android versions, keeps returning undetermined for longer whiles than in android 10 when the user clicks on permanentlyDenied option.

    Reproduction steps

    1. Request user for permission
    2. Permanently deny the permission from the user's end
    3. Ask for permission status

    Actual behavior

    The permission status is returned as undetermined once. Requesting the permission status again returns it as permanentlyDenied.

    Expected behaviour

    The permission status should be returned as permanentlyDenied.

    Configuration

    Version: ^5.0.0+hotfix.3

    [✓] Flutter (Channel stable, v1.17.1, on Mac OS X 10.15.5 19F101, locale en-IN)
     
    [✓] Android toolchain - develop for Android devices (Android SDK version 29.0.3)
    [✓] Xcode - develop for iOS and macOS (Xcode 11.2.1)
    [✓] Android Studio (version 3.5)
    [✓] VS Code (version 1.46.1)
    [✓] Connected device (1 available)
    
    • No issues found!
    

    Platform:

    • [ ] :iphone: iOS
    • [x] :robot: Android
    platform: android type: bug 
    opened by viplavrawal 24
  • Always says

    Always says "No permissions found in manifest"

    💬 Questions and Help

    Hello,

    I copied and paste the example: https://github.com/BaseflowIT/flutter-permission-handler/tree/develop/example both main.dart and the permissions inside AndroidManifest.xml.

    The message is always the same:

    Launching lib/main.dart on SM G935F in debug mode...
    Initializing gradle...
    Resolving dependencies...
    Running Gradle task 'assembleDebug'...
    Built build/app/outputs/apk/debug/app-debug.apk.
    Installing build/app/outputs/apk/app.apk...
    Syncing files to device SM G935F...
    D/libGLESv2( 2235): STS_GLApi : DTS, ODTC are not allowed for Package : com.example.flutter_app
    D/permissions_handler( 2235): No permissions found in manifest for: $permission
    I/chatty  ( 2235): uid=10519(u0_a519) com.example.flutter_app identical 5 lines
    D/permissions_handler( 2235): No permissions found in manifest for: $permission
    D/permissions_handler( 2235): No permissions found in manifest for: $permission
    I/chatty  ( 2235): uid=10519(u0_a519) com.example.flutter_app identical 3 lines
    D/permissions_handler( 2235): No permissions found in manifest for: $permission
    D/[email protected][MainActivity]( 2235): ViewPostIme pointer 0
    D/[email protected][MainActivity]( 2235): ViewPostIme pointer 1
    D/permissions_handler( 2235): No permissions found in manifest for: $permission
    I/flutter ( 2235): decodePermissionRequestResult called with: value:[{0: 4}]
    I/flutter ( 2235): {PermissionGroup.calendar: PermissionStatus.unknown}
    I/flutter ( 2235): PermissionStatus.unknown
    

    No matter what I do. Even tried more simple code, like just asking for one permission clicking a button.

    I do have all the permissions on manifest.

    Any clues?

    opened by vendramini 23
  • Unable to detect current Android Activity., null, null

    Unable to detect current Android Activity., null, null

    [ERROR:flutter/lib/ui/ui_dart_state.cc(186)] Unhandled Exception: PlatformException(PermissionHandler.PermissionManager, Unable to detect current Android Activity., null, null)

    platform: android 
    opened by Ronadlo7 22
  • Updated permission_status.dart comments

    Updated permission_status.dart comments

    Updated permission_handler_platform_interface\lib\src\permission_status.dart comments to better reflect current funtionality

    :sparkles: What kind of change does this PR introduce? (Bug fix, feature, docs update...)

    Docs update

    :arrow_heading_down: What is the current behavior?

    :new: What is the new behavior (if this is a feature change)?

    :boom: Does this PR introduce a breaking change?

    No

    :bug: Recommendations for testing

    :memo: Links to relevant issues/docs

    Issue 826

    :thinking: Checklist before submitting

    • [x] I made sure all projects build.
    • [-] I updated pubspec.yaml with an appropriate new version according to the pub versioning philosophy.
    • [-] I updated CHANGELOG.md to add a description of the change.
    • [x] I followed the style guide lines (code style guide).
    • [x] I updated the relevant documentation.
    • [x] I rebased onto current master.
    opened by YannickMaljaars 0
  • Execution failed for task ':permission_handler_android:compileDebugJavaWithJavac'.

    Execution failed for task ':permission_handler_android:compileDebugJavaWithJavac'.

    🐛 Bug Report

    error: warnings found and -Werror specified 1 error

    FAILURE: Build failed with an exception.

    • What went wrong: Execution failed for task ':permission_handler_android:compileDebugJavaWithJavac'.

    Compilation failed; see the compiler error output for details.

    Expected behavior

    Should compile

    Reproduction steps

    Run flutter run

    Configuration

    Version: 9.2.0

    Platform:

    • [ ] :iphone: iOS
    • [ X] :robot: Android
    opened by aawhitfield 2
  • ci: Enforce semantic PRs to make changelogs possible

    ci: Enforce semantic PRs to make changelogs possible

    :sparkles: What kind of change does this PR introduce? (Bug fix, feature, docs update...)

    Enforce semantic PRs to make changelogs possible

    :boom: Does this PR introduce a breaking change?

    No

    :bug: Recommendations for testing

    Merge, and create a new PR with a semantic prefix like ci: , docs: fix:, feat:

    opened by teolemon 1
  • Update links for pub.dev

    Update links for pub.dev

    :sparkles: What kind of change does this PR introduce? (Bug fix, feature, docs update...)

    With this PR, the right section on pub.dev will show the View/report issues link to GitHub again, like here (the show-logic was recently changed).

    :arrow_heading_down: What is the current behavior?

    It shows a Homepage link

    :new: What is the new behavior (if this is a feature change)?

    It shows links to Repository (GitHub) and View/report issues

    :boom: Does this PR introduce a breaking change?

    No.

    :bug: Recommendations for testing

    :memo: Links to relevant issues/docs

    :thinking: Checklist before submitting

    • [ ] I made sure all projects build.
    • [x] I updated pubspec.yaml with an appropriate new version according to the pub versioning philosophy.
    • [x] I updated CHANGELOG.md to add a description of the change.
    • [x] I followed the style guide lines (code style guide).
    • [x] I updated the relevant documentation.
    • [x] I rebased onto current master.
    opened by nohli 0
  • Permission.storage.request() returns permanentlyDenied when it's allowed on android 13

    Permission.storage.request() returns permanentlyDenied when it's allowed on android 13

    🐛 Bug Report

    This used to work until recently but I think it stopped exactly as I upgraded to android 13.

    Expected behavior

    return allowed

    Reproduction steps

    run Permission.storage.request();

    Configuration

    I have the below 2 lines in AndroidManifest:

    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    

    Version: Flutter: 3.0.5 permission_handler: 10.0.0 android 13

    Platform:

    • [ ] :iphone: iOS
    • [X] :robot: Android
    opened by salaryazdjerdi 5
  • Getting NSUserTrackingUsageDescription info plist warning after IPA submission

    Getting NSUserTrackingUsageDescription info plist warning after IPA submission

    🔙 Regression

    I don't use any ads sdk, but now Apple is warning me about this permission below that I am not asking. When searching in my workspace, the only one that access this APIs is this package. I have configured the podfile correctly by having the app transparency tracking commented.

    Old (and correct) behavior

    Upload build with no warning

    Current behavior

    Getting this warning after submission

    Dear Developer,We identified one or more issues with a recent delivery for your app, "Believe - Daily Affirmations" 4.0.0 (83). Your delivery was successful, but you may wish to correct the following issues in your next delivery:ITMS-90683: Missing Purpose String in Info.plist - Your app‘s code references one or more APIs that access sensitive user data. The app‘s Info.plist file should contain a NSUserTrackingUsageDescription key with a user-facing purpose string explaining clearly and completely why your app needs the data. If you're using external libraries or SDKs, they may reference APIs that require a purpose string. While your app might not use these APIs, a purpose string is still required.
    

    Reproduction steps

    Upload ipa to testflight

    Version: 9.2.0

    Platform:

    • [x] :iphone: iOS
    • [ ] :robot: Android
    opened by armandojimenez 2
Owner
Baseflow
We provide software, skills and knowledge and with this we want to make a contribution to the world. We love to make innovation happen.
Baseflow
This repo contains a collection of permission related Flutter plugins which can be used to request permissions to access device resources in a cross-platform way.

Flutter Permission Plugins Deprecation Notice This repository has been replaced by the Flutter permission_handler plugin and will not longer be mainta

Baseflow 51 Dec 13, 2021
A sample app of using the image_picker + path_provider and permission_handler package to request permission and store photos on mobile

image_picker_example A new Flutter project. Getting Started This project is a starting point for a Flutter application. A few resources to get you sta

iang12 4 Apr 19, 2022
Api Call Check flutter - A new Flutter project that demonstrates api calling and displays them in a scrollable list

api_fetch A new Flutter project that demonstrates api calling and displays them

Babish Shrestha 0 Jan 2, 2022
A package help you to make api call and handle error faster, also you can check for internet before call api.

http_solver ##not for production use, only for learning purpose. A package help you to make api call and handle error faster, also you can check for i

Abdelrahman Saed 1 Jun 18, 2020
Youtube API in Dart app. Used for downloading media and search request.

Youtube API Youtube API made by using Dart and Flutter in a cross-platform app. Used for downloading media and search request. For an idea of how the

Avian Silviu-Gabriel 0 Nov 4, 2021
Hava Durumu Uygulaması - Temel Api Request

Hava Ne Durumda Bu uygulama temelde apilerle nasıl çalışılır, apiden veri nasıl GET edilir gibi işlemleri anlamak için yapılmıştır. Uygulama Fotoğrafl

Mehmet Ege Aydın 4 Jun 14, 2022
Morphing Coffee 0 Jan 27, 2022
Flutter-for-Wordpress-App - Cross platform wordpress news app built with Flutter and WP REST API

Flutter for Wordpress A flutter app for a wordpress websites with clean and elegant design. This app is available in free and pro version. You can cho

Madhav Poudel 233 Sep 15, 2022
A Flutter plugin to request the device unlock screen.

device_unlock A Flutter plugin to request the device unlock screen on Android and iOS. How does it work The following attempts and fallbacks are made:

Cíngulo 19 Sep 7, 2022
ESP-Touch Dart API for Flutter. Platform-specific implementation for Android (Java) and iOS (Objective-C).

esptouch_flutter Flutter plugin for ESP-Touch to configure network for ESP-8266 and ESP-32 devices. Runs on iOS and Android. esptouch_flutter is Flutt

SMAHO Engineering OSS 84 Sep 6, 2022
A Flutter plugin that provides assets abstraction management APIs without UI integration, you can get assets (image/video/audio) on Android, iOS and macOS.

photo_manager Photo/Assets management APIs for Flutter without UI integration, you can get assets (image/video/audio) from Android, iOS and macOS. 提供相

FlutterCandies 497 Sep 14, 2022
This project is Riot game information check service using Riot api.

riot_api_project this project is Riot game information check service using Riot api. Getting Started This project is a starting point for a Flutter ap

null 1 Dec 12, 2021
Cross-platform flutter plugin for reading and writing NFC tags. Not maintained anymore - not looking for new maintainer, fork instead.

nfc_in_flutter NFC in Flutter is a plugin for reading and writing NFC tags in Flutter. It works on both Android and iOS with a simple stream interface

Andi Semler 111 Jul 18, 2022
Simple and hackable request for dart

Simple and hackable request for dart

Thiago da Silva Teixeira 2 Sep 2, 2022
Http request inspector for Flutter application

Alice Alice is an HTTP Inspector tool for Flutter which helps debugging http requests. It catches and stores http requests and responses, which can be

Hau Tran 4 Dec 4, 2021
A powerful Http client for Dart, which supports Interceptors, FormData, Request Cancellation, File Downloading, Timeout etc.

dio_http A powerful Http client for Dart, which supports Interceptors, Global configuration, FormData, Request Cancellation, File downloading, Timeout

null 46 Dec 19, 2021
A powerful Http client for Dart, which supports Interceptors, FormData, Request Cancellation, File Downloading, Timeout etc.

Language: English | 中文简体 dio A powerful Http client for Dart, which supports Interceptors, Global configuration, FormData, Request Cancellation, File

Flutter中国开源项目 11k Sep 21, 2022
WooCommerce App template that uses Flutter. Integrated to work with WooCommerce stores, connect and create an IOS and Android app from Flutter for IOS and Android

WooCommerce App: Label StoreMax Label StoreMax - v5.3.1 Official WooSignal WooCommerce App About Label StoreMax Label StoreMax is an App Template for

WooSignal 293 Sep 22, 2022