我已经在这个问题上苦苦挣扎了一段时间,在任何地方都找不到真正的直接答案来解决它。我真的很感谢任何帮助和更实用的代码来理解这一点。
我正在查询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)如果没有密钥,则添加到列表中。
答案 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();