Как определить расстояние между пользователями во флаттере списка? - PullRequest
0 голосов
/ 09 июля 2020

У меня есть коллекция firestore с одним из полей документов, содержащих местоположения (географические точки) пользователей, я хочу построить listview с расстоянием между текущим пользователем и всеми другими пользователями в порядке возрастания. Как добиться флаттера?

Это выглядит примерно так https://i.stack.imgur.com/yXfME.png

Обновить

Как узнать местоположение из документа в списке?

1 Ответ

1 голос
/ 09 июля 2020

ШАГ 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));

См. этот вопрос для получения дополнительной информации о сортировке.

Вопрос: Привет, спасибо как мне вернуть это в список и как получить документ из 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
...