【问题标题】:Flutter permission_handler : request location permission on iOSFlutter permission_handler : 在 iOS 上请求位置权限
【发布时间】:2022-08-02 19:47:28
【问题描述】:

我只想在用户拒绝权限或不允许权限时才要求用户启用权限 这个功能在安卓上运行得很好

  Future _getLocationPermission() async {
    if (await Permission.location.request().isGranted) {
      permissionGranted = true;
    } else if (await Permission.location.request().isPermanentlyDenied) {
      throw(\'location.request().isPermanentlyDenied\');
    } else if (await Permission.location.request().isDenied) {
      throw(\'location.request().isDenied\');
      permissionGranted = false;
    }
  }

但在 iOS 上它抛出异常权限 isPermanentlyDenied 未处理的异常:location.request().isPermanentlyDenied 即使用户在使用应用程序时允许位置权限 我正在使用permission_handler package

    标签: flutter location


    【解决方案1】:

    iOS 更严格,如果用户已经永久拒绝,它不允许您请求权限。在这种情况下,您唯一的选择是通知用户这一点,并提供打开应用程序设置并在那里授予权限的可能性。如果用户同意,这可能会重新启动您的应用程序。

    因此,无需请求即可检查状态:

    final status = await Permission.location.status;
    

    如果状态被永久拒绝,则显示一个 Flutter 对话框(在这种情况下您不能使用系统权限授予对话框):

    if (status == PermissionStatus.permanentlyDenied) {
      // display a dialog, explain the user that he/she can grant 
      // permission only in the phone's application settings
    }
    

    如果用户想要这样做,您可以路由到应用程序设置:

    openAppSettings(); // this is a method of the permission handler package
    

    这种方法是一种未来,但根据我的经验,你不需要等待它。

    【讨论】:

    • 即使用户允许权限,此条件中的代码“if (await Permission.location.request().isPermanentlyDenied)”也始终执行
    • 正确,如果您等待request(),它将被执行,并返回一个PermissionStatus,例如Permission.location.request().isGranted 是一个Future<bool>,如果已经授予权限,这将是真的。
    【解决方案2】:

    请检查此link。您还必须在 POD 文件中提及权限。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-07
      • 2014-11-17
      • 2020-08-24
      • 2022-10-06
      • 2019-05-21
      • 1970-01-01
      • 2020-04-19
      相关资源
      最近更新 更多