【发布时间】:2020-10-30 02:19:00
【问题描述】:
我有一个 firestore 集合,其中包含用户位置(地理点)的文档字段之一,我想构建一个 listview,当前用户和所有其他用户之间的距离按升序排列。我如何在颤振中实现?
看起来像这样https://i.stack.imgur.com/yXfME.png
更新
如何从列表中的文档中获取位置?
【问题讨论】:
标签: firebase flutter dart google-cloud-firestore
我有一个 firestore 集合,其中包含用户位置(地理点)的文档字段之一,我想构建一个 listview,当前用户和所有其他用户之间的距离按升序排列。我如何在颤振中实现?
看起来像这样https://i.stack.imgur.com/yXfME.png
更新
如何从列表中的文档中获取位置?
【问题讨论】:
标签: firebase flutter dart google-cloud-firestore
第一步:获取当前用户与当前列表项的距离,以公里为单位
var distanceInKms = GetDistance(latitude1, longitude1, latitude2, longitude2);
double GetDistance(double lat1, double lon1, double lat2, double 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));
}
第 2 步: 将这些值添加到列表项对象。并根据该字段对列表进行排序。
myList.sort((a,b) => a.distance.compareTo(b.distance));
有关排序的更多信息,请参阅this question。
问题:您好,谢谢,我如何在 listview 中返回它以及如何从列表中的 firestore 获取文档?
回答:
QuerySnapshot snapshot = await Firestore.instance.collection("YOUR_COLLECTION_NAME").getDocuments();
List<items> myList = [];
snapshot.documents.forEach((doc) {
//Convert incoming JSON info to object of your type and add to list
myList.add(List.fromJSON(doc.data));
});
//Apply logic on myList for sorting based on location
【讨论】:
listview 中返回这个以及如何从列表中的 firestore 获取文档?