【问题标题】:How to get distance between users in listview flutter?如何在listview颤振中获得用户之间的距离?
【发布时间】:2020-10-30 02:19:00
【问题描述】:

我有一个 firestore 集合,其中包含用户位置(地理点)的文档字段之一,我想构建一个 listview,当前用户和所有其他用户之间的距离按升序排列。我如何在颤振中实现?

看起来像这样https://i.stack.imgur.com/yXfME.png

更新

如何从列表中的文档中获取位置?

【问题讨论】:

    标签: firebase flutter dart google-cloud-firestore


    【解决方案1】:

    第一步:获取当前用户与当前列表项的距离,以公里为单位

    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 获取文档?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-10
    • 2020-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-08
    • 2019-07-26
    相关资源
    最近更新 更多