【发布时间】:2021-02-03 14:50:24
【问题描述】:
希望你一切都好。
在这里,我在我的应用程序中创建了一个过滤器系统,我有一个 List filters 在其上应用 forEach 迭代,并且此迭代的每个 String 过滤器都添加到 Where 子句中,该子句检索所有其部分字段对应于我的 Firestore 查询的字符串过滤器之一的文档。
这是我尝试做的:
Stream<List<Article>> filteredArticles() async* {
List<String> filters = ['Sport', 'Santé'];
final articlesCollection = FirebaseFirestore.instance.collection('REVIEWS');
Stream<List<Article>> filteredArticles;
Stream<QuerySnapshot> queryStream;
await Future.forEach(filters, (filter) async {
queryStream = articlesCollection
.where('section', isEqualTo: filter)
.orderBy('createdDate', descending: true)
.snapshots();
filteredArticles = queryStream.map(_convertToArticleList);
});
yield* filteredArticles;
}
将QuerySnapshot映射到文章列表的方法
List<Article> _convertToArticleList(QuerySnapshot snapshot) {
return snapshot.docs.map((doc) {
return Article.fromMap(doc.data());
}).toList();
}
将firestore文档数据转换为Article类的方法
factory Article.fromMap(Map<String, dynamic> data) {
final id = data[Fields.id];
final imagesLinks = data[Fields.imagesLinks];
final createdDate = data[Fields.createdDate];
final date = data[Fields.date];
final title = data[Fields.title];
final details = data[Fields.details];
final section = data[Fields.section];
final link = data[Fields.link];
final likes = data[Fields.likes];
return Article(
id: id,
imagesLinks: imagesLinks,
createdDate: createdDate,
details: details,
date: date,
title: title,
section: section,
link: link,
likes: likes,
);
}
这是我的数据库,它目前包含 3 个文档,其中 2 个具有对应于其中一个过滤器(Sport、Santé)的 section 字段。
问题是我只收到一个文档而不是 2 个,这取决于过滤器在表格中的位置,即如果我将 Health 放在表格的第一个位置,我只会收到带有 section 字段的文档如果我将 Sport 放在表格的第一个位置,则对应于 Health 并且相同,我只收到与 Sport 对应的 section 字段的文档,而不是同时收到 2 个。
我的目标是检索其部分字段对应于我的列表中的字符串过滤器之一的所有文档。
【问题讨论】:
标签: firebase flutter dart google-cloud-firestore stream