Плагин GeoFlutterFire Flutter для Firestore не возвращает поле расстояния - PullRequest
0 голосов
/ 14 апреля 2020

Я использую GeoFlutterFire , плагин для Flutter, который просеивает коллекцию для записей, которые находятся рядом с указанной GeoFirePoint.
Ключ расстояния должен возвращаться с Firestore <DocumentSnapshot>s, но нет, только ключи по умолчанию. Когда я ищу его, как показано ниже, он возвращает ноль. Ключ не существует.

  1. Я пытался изменить местоположение GPS эмулятора, а затем usersAddressGeoFirePoint, не повезло.
  2. В инструкциях неясно, создает ли GeoFire это поле или оно должно существовать как поле Firestore. Я попытался вручную создать поле Firestore с помощью фиктивного значения, и тогда значение, которое я получаю из загрузки, - это не расстояние между двумя точками геопозиции, а фиктивное значение, которое было установлено в Firestore.

Это большое разочарование, мне нужно расстояние, чтобы я мог показать его на Картах в приложении, мой код очень близок к примеру кода для плагина, поэтому я не могу понять, почему он не работает.

GeoFirePoint usersAddressGeoFirePoint = geo.point(latitude: 56.088944, longitude: -4.151800);

    localJobsStream = geo.collection(collectionRef: myFirestore.collection('JobsMeta'))
        .within(center: usersAddressGeoFirePoint, radius: 1000, field: 'position', strictMode: true);

    localJobsStream.listen((List<DocumentSnapshot> documentList) {
${documentList[0].data.keys.contains('distance')}");
}

1 Ответ

0 голосов
/ 18 апреля 2020

Я проверил Geoflutterfire в (центр: центр, радиус: радиус, поле: поле, strictMode: strictMode) метод, и он возвращает Stream<List<DocumentSnapshot>>, как и ожидалось, но для расчета расстояния он использует класс-оболочка DistanceDocSnapshot , который имеет переменную DocumentSnapshot и distance.

Когда я отлаживал метод внутри, я обнаружил, что DistanceDocSnapshot имеет переменную distance типа double, но они не устанавливают значение расстояния в DocumentSnapshot перед возвратом.

Таким образом, в пакете есть данные, но они бесполезны, пока мы их не получим. К тому времени, когда они решат эту проблему или мы узнаем любой другой способ ее использования, вы можете использовать приведенный ниже код, чтобы получить расстояние, поскольку они используют то же самое в пакете и упомянуто в readme здесь Пакет GeoFlutterFire :

 GeoFirePoint center = geo.point(
     latitude: currentUserPos.latitude,
     longitude: currentUserPos.longitude,
 );

 double distance = center.distance(lat: geoPoint.latitude, lng: geoPoint.longitude);

Обновление на том же : в соответствии с журналом изменений на странице пакета мы не сможем получить доступ к данным, используя do c .data ['distance'] с версия 2.1.0

...