在我的代码中,能够成功获取两个坐标(lAT和LNG)之间的距离,但是我的listview仅返回值列表之一的值。请在下面找到我的代码。
String lat = ""; String lng = ""; Double distanceInKilometers = ""; Future getDistance() async { distanceInMeters = await Geolocator().distanceBetween( currentLocation.latitude, currentLocation.longitude, double.parse(lat), double.parse(lng)); distanceInKilometers = distanceInMeters.toInt() / 1000; } ListView.separated( itemCount: content.length, itemBuilder: (context, position) { lat = content[position].lat; lng = content[position].lng; return Container( child: Column( children: <Widget>[ new Text(distanceInKilometers.toString()) ],), ))
我在您的代码中看到了多个错误。
首先,您的代码未编译
Double
double
String
其次,将全局状态与异步调用一起使用。如果仅将参数传递给getDistance方法,那会更好。像这样:
Future<double> getDistance(double lat, double long) async { final distanceInMeters = await Geolocator().distanceBetween( currentLocation.latitude, currentLocation.longitude, lat, lng ); return distanceInMeters / 1000; }
最后,您应该使用FutureBuilder调用getDistance:
getDistance
ListView.separated( itemCount: content.length, separatorBuilder: (context, position) { // return a separator widget; }, itemBuilder: (context, position) { final current = content[position]; return FutureBuilder<String>( future: getDistance(current.lat, current.long) .then((value) => value.toString()), builder: (context, snapshot) { return Container( child: Column( children: <Widget>[new Text(snapshot.data)], ), ); }); });