首页 > 解决方案 > Flutter GeoLocator PermissionRequestInProgressException

问题描述

我正在使用 Flutter Geolocator 包,并使用以下代码:

  void determinePosition() async {
    Position currentPosition;

    try {
      currentPosition = await Geolocator
          .getCurrentPosition(desiredAccuracy: LocationAccuracy.best);

    } on TimeoutException {
      _streamError('Location request timed out.');

    } on PermissionDeniedException {
      _streamError('Location permissions are denied.');

    } on LocationServiceDisabledException {
      _streamError('Location services are disabled.');

    } on PermissionRequestInProgressException {
      _streamError('Permission in progress.');
      // Do nothing. A strange bug in the library that causes an exception on first request IMO
    }

    _streamSuccess(currentPosition);
  }

它工作得很好,因为要求用户提供津贴,如下所示:

在此处输入图像描述

但是,当我点击“允许一次”时,它会引发异常:

在此处输入图像描述

我第二次浏览代码时,按预期获取了当前位置。

显然,我可以通过determinePosition使用一些失败计数器递归调用异常来解决这个问题,但我发现这个解决方案非常愚蠢。

其他人一直有这个问题,或者我得到这个异常的原因是什么?
预期的行为显然是在“允许”点击时返回当前位置。
一直没能在网上找到信息。

标签: fluttergoogle-maps

解决方案


选择了糟糕的解决方案,没有时间浪费在愚蠢的问题上:

  Future<void> determinePosition() async {
    Position currentPosition;

    try {
      currentPosition = await Geolocator
          .getCurrentPosition(
          desiredAccuracy: LocationAccuracy.best
      );
      _retryCount = 0;

    } on TimeoutException {
      _streamError('Location request timed out.');

    } on PermissionDeniedException {
      _streamError('Location permissions are denied.');

    } on LocationServiceDisabledException {
      _streamError('Location services are disabled.');

    } on PermissionRequestInProgressException {
      if (_retryCount < RETRY_COUNT) {
        _retryCount++;
        await determinePosition();
      }
    }

    _streamSuccess(currentPosition);
  }

我在这里提过:https ://github.com/Baseflow/flutter-geolocator/issues/450


推荐阅读