设法按离用户位置最近的快照对我的快照进行排序,但是无法仅显示返回距离10(km)内的快照。我尝试编写if语句在distance函数中返回totalDistance,但是没有运气。任何帮助将不胜感激!
double calculateDistance(lat1, lon1, lat2, lon2){
var p = 0.017453292519943295;
var c = cos;
var a = 0.5 - c((lat2 - lat1) * p)/2 +
c(lat1 * p) * c(lat2 * p) *
(1 - c((lon2 - lon1) * p))/2;
return 12742 * asin(sqrt(a));
}
double distance(Position position, DocumentSnapshot snapshot){
final double myPositionLat = position.latitude;
final double myPositionLong = position.longitude;
final double lat = snapshot.data['latitude'];
final double long = snapshot.data['longitude'];
double totalDistance = calculateDistance(myPositionLat, myPositionLong, lat, long);
return totalDistance;
}
@override
void initState() {
super.initState();
subscription = collectionReference.snapshots().listen((data) async {
final location = await getLocation();
print('user location = $location');
final documents = data.documents;
documents.sort((a, b) {
final distanceA = distance(location, a);
final distanceB = distance(location, b);
return distanceA.compareTo(distanceB);
});
}
答案 0 :(得分:1)
尝试使用where
过滤列表。我从未使用过Dart,但我想它看起来像这样:
final documents = data.documents.where((a) => distance(location, a) < 10);
如果您想要一个实际的列表而不是一个Iterable,也许可以使用.toList();
。