从查询中排除文件

时间:2019-10-24 20:32:29

标签: firebase flutter dart google-cloud-firestore

我已经在这个问题上苦苦挣扎了一段时间,在任何地方都找不到真正的直接答案来解决它。我真的很感谢任何帮助和更实用的代码来理解这一点。

我正在查询Firestore中的集合中的文档。然后,我将它们放入自定义列表中:

QuerySnapshot snapshot = await cardRef.limit(10).getDocuments();
    List<CustomCard> cards =
        snapshot.documents.map((doc) => CustomCard.fromDocument(doc)).toList();

然后我以如下方式显示列表:

//if cards != null
return Stack(children: cards);

但是,如果文档在“密钥”映射中包含密钥,则需要阻止将其添加到“卡片”中。

我尝试不成功执行以下操作:

if(snapshot.documents.contains('keys.$currentUserid'))
//dont add to list

但是有人在我以前的帖子中说过,我应该将该卡藏在客户端。那是最好的方法,因为该卡仍会添加到列表中吗?我该怎么办?

总而言之:1)从集合中获取所有文档,2)检查每个文档中的特定密钥,3)如果没有密钥,则添加到列表中。

1 个答案:

答案 0 :(得分:0)

您正在使用snapshot.documents,它是List<DocumentSnapshot> object。因此,您正在寻找一种从snapshot.documents导出另一个列表的方法,其中删除了一些文档。

我最初对flutter filter list的搜索,表明您应该使用List.where。此网站上的一个简单示例:Flutter: Filter list as per some condition

这会导致类似的情况:

QuerySnapshot snapshot = await cardRef.limit(10).getDocuments();
List<DocumentSnapshot> filtered = snapshot.documents.where((doc) => ... /* your filter goes here */ )
List<CustomCard> cards = filtered.map((doc) => CustomCard.fromDocument(doc)).toList();