flutter 地理位置问题;如果没有GPS信号,则无限加载

qvtsj1bj  于 2022-12-14  发布在  Flutter
关注(0)|答案(1)|浏览(231)

我正在使用Flutterflow,我已经为定位服务做了一个自定义功能。
在我的应用程序中,我使用了一个打印设备实际位置的功能。这一切都很好。我还添加了一个错误消息,如果定位服务被拒绝,这也很好。但是,如果设备没有任何GPS信号,那么页面将永远加载。我还试图触发一个错误消息,如“没有GPS信号”。不幸的是,这不起作用。
因此,如果定位服务被拒绝,应用程序会显示我的错误消息“GPS:deactivated/no Signal”,我在Xcode的调试控制台中看到以下内容:2022-11-04 13:15:46.174282+0100跑步者扑动:查询用户位置时出错:位置权限被永久拒绝,我们无法请求权限。
但是,如果设备没有任何信号,则不会显示错误消息,并且控制台中会显示以下内容:位置更新失败:错误原因:(null)错误说明:无法完成操作。(kCLErrorDomain错误0。)
有没有人知道我必须做什么,停止无限加载,并产生一个错误消息,如果没有gps信号?
以下是完整的功能代码:

import 'dart:math' as math;

String positionAsWgs(LatLng? position) {
  if (position == null) {
    return "GPS: no Signal";
  } else {
    var est = position.latitude;
    var north = position.longitude;
    String estString = est.toStringAsFixed(5);
    String northString = north.toStringAsFixed(5);
    var wgs84 = "$estString° N / $northString° E";

    if (wgs84 == "0.00000° N / 0.00000° E") {
     return "GPS: deactivated";
    } else {
      return wgs84;
    }
  }
}

我试图拦截“位置==空”的“无信号”情况,但似乎如果没有信号,设备不会报告空。因此我不知道该查找什么。

amrnrhlw

amrnrhlw1#

你可以用超时来捕捉这种情况。在你等待位置的时候,最好是在你给了权限之后。你的代码应该看起来像下面的片段:

try {
    final locationData = await Future.value(yourRetrieveLocationFunction).timeout(const Duration(seconds: 15));
        return yourResult;
    } on TimeoutException {
        return yourError;
    }

相关问题