getPostDocs method

Stream<List<Map<String, dynamic>>> getPostDocs(
  1. String appId,
  2. String path,
  3. Map<String, dynamic> query, {
  4. Map<String, dynamic>? filters,
})

Implementation

Stream<List<Map<String, dynamic>>> getPostDocs(
    String appId, String path, Map<String, dynamic> query,
    {Map<String, dynamic>? filters}) async* {
  Query q = firestore.collection(appId).doc('data').collection('posts');

  query.keys.forEach((key) {
    q = q.where('features.' + key, isEqualTo: query[key]);
  });

  if (filters != null) {
    filters.keys.forEach((key) {
      q = q.where('features.' + key, isEqualTo: filters[key]);
    });
  }

  q = q.orderBy('features.dateAdded', descending: true);

  List<Map<String, dynamic>> posts = [];
  q.snapshots().listen((QuerySnapshot querySnapshot) async {
    posts.clear();
    await Future.forEach(querySnapshot.docs, (DocumentSnapshot post) {
      posts.add(post.data() ?? {});
    });
    _postsStream.sink.add(posts);
  });

  yield* _postsStream.stream;
}