Flireter Firestore пытается использовать поток, как я использовал QuerySnapshot - PullRequest
0 голосов
/ 09 марта 2020

Я новичок в трепетании и пожарной базе и пытаюсь добавить документы Firestore в список. Мне удалось сделать это с помощью этого кода:

getLocationListings(ListingNotifier listingNotifier, String location) async {
  QuerySnapshot snapshot = await Firestore.instance
      .collection('listings')
      .where('location', isEqualTo: location)
      .getDocuments();
      print(location);

  List<Listing> _listingList = [];

  snapshot.documents.forEach((document) {
    Listing listing = Listing.fromMap(document.data);
    _listingList.add(listing);
  });

  listingNotifier.listingList = _listingList;
}

Я сейчас использую пакет Flutter: «GeoFlutterFire», чтобы я мог запросить документы Firestore с помощью геолокации.

Я был после readme от: https://pub.dev/packages/geoflutterfire и для чтения данных похоже, что он использует поток, как это:

Stream<List<DocumentSnapshot>> stream = geo.collection(collectionRef: collectionReference)
                                        .within(center: center, radius: radius, field: field);

Мой вопрос, есть ли В любом случае я могу добавить документы из этого потока в мой _listingList, как я делаю в своем первом примере кода?

Я попытался просто отключить QuerySnapshot с предоставленным примером Stream и изменить снимок с потоком, но stream.documents.forEach((document) не работает

Geoflutterfire geo = Geoflutterfire();
Firestore _firestore = Firestore.instance;
GeoFirePoint center = geo.point(latitude: lat, longitude: lng);
var collectionReference = _firestore.collection('listings');
double radius = 50;
String field = 'position';

getLocationListings(ListingNotifier listingNotifier, GeoFirePoint location) async {

  Stream<List<DocumentSnapshot>> stream = geo.collection(collectionRef: collectionReference)
                                        .within(center: center, radius: radius, field: field);


  List<Listing> _listingList = [];

  stream.documents.forEach((document) {
    Listing listing = Listing.fromMap(document.data);
    _listingList.add(listing);
  });

  listingNotifier.listingList = _listingList;
}

1 Ответ

2 голосов
/ 09 марта 2020

Продолжая документацию, в которой говорится, что вам нужно слушать поток. Вот пример, который они дают:

    stream.listen((List<DocumentSnapshot> documentList) {
      // doSomething()
    });
...