Flutter-geolocator: 权限被拒绝时崩溃

创建于 2018-12-13  ·  7评论  ·  资料来源: Baseflow/flutter-geolocator

🐛 错误报告

虽然允许位置权限它工作正常,但在拒绝位置权限时我收到以下错误。

Dart 错误:未处理的异常:
PlatformException(PERMISSION_DENIED,拒绝访问位置数据,空)

0 Geolocator._handleInvalidPermissions (package:geolocator/geolocator.dart:197:7)

1 Geolocator.getCurrentPosition (package:geolocator/geolocator.dart:106:7)

2 SignupScreenPageState._submitAction (package:locum_mate/Screens/signup.dart:126:10)

3 SignupScreenPageState.buildWidget。.(包:locum_mate/Screens/signup.dart:261:31)

4 _InkResponseState._handleTap(包:flutter/src/material/ink_well.dart:507:14)

5 _InkResponseState.build。(包:flutter/src/material/ink_well.dart:562:30)

6 GestureRecognizer.invokeCallback (package:flutter/src/gestures/recognizer.dart:102:24)

7 TapGestureRecognizer._checkUp (package:flutter/src/gestures/tap.dart:242:9)

8 TapGestureRecognizer.handlePrimaryPointer ( package:flutter <…>

预期行为

预期行为应该给我空响应,以便我们可以进一步进行。

繁殖步骤

在 pubspec.yaml 中导入 pub

将以下代码写入任何按钮点击事件
尝试 {
位置 position = await Geolocator()
.getCurrentPosition(desiredAccuracy: LocationAccuracy.high);
}赶上(e){
打印(e);
}

你会有一个错误。

配置

版本: 1.0.1

[✓] Flutter (Channel master, v1.0.1-pre.2, on Mac OS X 10.14 18A384a, locale en-GB)
[✓] Android 工具链 - 为 Android 设备开发 (Android SDK 28.0.3)
[✓] iOS 工具链 - 为 iOS 设备开发 (Xcode 10.1)
[✓] Android Studio(3.2 版)
[✓] VS 代码(版本 1.29.1)
[✓] 已连接设备(1 个可用)

• 未发现问题!

平台:

  • [x] :iphone: iOS
  • []:机器人:安卓

最有用的评论

@YogeshLegendkiller,@kaumudpa,@jaumard提供的解决方案是解决这一问题的提出方式。

另一种方法是使用checkGeolocationPermissionStatus方法并确保在调用getCurrentPositiongetLastKnownPositiongetPositionStream之前将状态设置为PermissionStatus.granted getPositionStream方法。 但是,这意味着您需要注意自己请求权限。 例如:

Geolocator geolocator = Geolocator();
GeolocationStatus status = await geolocator.checkGeolocationPermissionStatus();
if (status == GeolocationStatus.granted) {
    Position position = await geolocator.getCurrentPosition();
}

所有7条评论

你有没有解决这个如何处理这个

有什么解决方法吗?

@YogeshLegendkiller @kaumudpa如果您想解决这个问题,只需尝试接听电话并在 PlatformException 上返回 null。

@YogeshLegendkiller,@kaumudpa,@jaumard提供的解决方案是解决这一问题的提出方式。

另一种方法是使用checkGeolocationPermissionStatus方法并确保在调用getCurrentPositiongetLastKnownPositiongetPositionStream之前将状态设置为PermissionStatus.granted getPositionStream方法。 但是,这意味着您需要注意自己请求权限。 例如:

Geolocator geolocator = Geolocator();
GeolocationStatus status = await geolocator.checkGeolocationPermissionStatus();
if (status == GeolocationStatus.granted) {
    Position position = await geolocator.getCurrentPosition();
}

如何请求许可?

@abdullah4one您可以使用permission_handler并请求这样的许可:

import 'package:permission_handler/permission_handler.dart';

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

回复可能晚了,但我也面临着同样的问题,即该应用程序在 iOS 中没有请求许可,并且在 android 中运行良好。

因为没有请求许可,这就是许可代码不适用于 iOS 的原因。 我找到了一个名为“location_permissions”的包,它可以用来手动请求许可。

步骤如下

  1. 在“pubspec.yaml”中添加“location_permissions: 3.0.0+1”这个依赖项。 请注意,我是为 flutter 1.22.0 做的,所以对于 flutter 2.0 这可能是一个问题。
  2. 导入文件中的包

    导入'包:location_permissions/location_permissions.dart ';

  3. 在要请求权限的页面上添加以下代码。 (最好将其添加到应用程序的第一页。)

     <strong i="16">@override</strong>
      void initState() {
       ....
      if (Platform.isIOS) {
        location_permission();
      }
      ....
    

    }

  4. 在同一个文件中添加以下两个方法

    void location_permission() 异步{
    最终 PermissionStatus 权限 = await _getLocationPermission();
    如果(权限== PermissionStatus.granted){
    最终位置 = 等待 geolocator.getCurrentPosition(
    requiredAccuracy: LocationAccuracy.best);

      // Use the position to do whatever...
    }
    

    }

    未来_getLocationPermission() 异步 {
    最终 PermissionStatus 权限 = 等待 LocationPermissions()
    .checkPermissionStatus(level: LocationPermissionLevel.location);

    if (permission != PermissionStatus.granted) {
      final PermissionStatus permissionStatus = await LocationPermissions()
          .requestPermissions(
              permissionLevel: LocationPermissionLevel.location);
    
      return permissionStatus;
    } else {
      return permission;
    }
    

    }

就是这样,现在你应该在 iOS 应用程序中得到一个弹出窗口,它会要求获得位置许可。

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

devalp-pro picture devalp-pro  ·  3评论

deisold picture deisold  ·  3评论

jaumard picture jaumard  ·  3评论

hectorAguero picture hectorAguero  ·  5评论

long1eu picture long1eu  ·  4评论