我试图获取用户的经度和纬度坐标,但是我无法从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的新手,所以我们将不胜感激!
答案 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();
}