从Future [VERBOSE-2:ui_dart_state.cc(148)]获取位置时发生错误未处理的异常:无效的参数

时间:2019-04-15 19:40:57

标签: dart flutter geolocation

我试图获取用户的经度和纬度坐标,但是我无法从Future中访问这些值。

当前,我正在使用Geolocator软件包来获取Future,但是在检索值时遇到错误。

要获取位置,这就是我正在做的事情:

Future<Position> locateUser() async {
  return Geolocator()
      .getCurrentPosition(desiredAccuracy: LocationAccuracy.high)
      .then((location) {
    if (location != null) {
      print("Location: ${location.latitude},${location.longitude}");
    }
    return location;
  });
}

要在构建Widget函数中检索这些坐标, 我正在这样做:

bool firstTime = true;
String latitude;
String longitude;

  @override
  Widget build(BuildContext context) {
    if(firstTime == true) {
      locateUser().then((result) {
        setState(() {
          latitude = result.latitude.toString();
          longitude = result.longitude.toString();
        });
      });
      fetchPost(latitude, longitude);
      firstTime = false;
    }

我得到的错误是:

[VERBOSE-2:ui_dart_state.cc(148)] Unhandled Exception: Invalid argument(s)

我希望能够将这些坐标存储在变量中,并将它们传递给我拥有的其他函数。我是Flutter的新手,所以我们将不胜感激!

1 个答案:

答案 0 :(得分:0)

您正在使用async方法,因此您可以使用await关键字来获取响应:

更改此

            Future<Position> locateUser() async {
              return Geolocator()
                  .getCurrentPosition(desiredAccuracy: LocationAccuracy.high)
                  .then((location) {
                if (location != null) {
                  print("Location: ${location.latitude},${location.longitude}");
                }
                return location;
              });
            }

对此:

            Future<Position> locateUser() async {
              final location = await Geolocator().getCurrentPosition(desiredAccuracy: LocationAccuracy.high);

              if (location != null) {
                  print("Location: ${location.latitude},${location.longitude}");
               }

              return location;
            }

在回调中调用fetchPost(latitude, longitude),然后从build方法中删除您的调用并继续使用initState方法,或者您可以使用FutureBuilder。

      @override
      void initState() {
        locateUser().then((result) {
            setState(() {
              latitude = result.latitude.toString();
              longitude = result.longitude.toString();
              fetchPost(latitude, longitude);
            });

          });
        super.initState();
      }