我对两者之间的区别感到困惑。我的理解是getDocuments是Future的一种,似乎可以根据查询获取整个文档。另一方面,snapshots是Stream的一种,如果我错了,请纠正我,我认为它代表了查询的结果?我需要对此问题进行更具体的说明。我将包含一些代码片段作为示例,以进一步说明
getDocuments()

getUserById(String userId) async {
    return await _firestore.collection("users").where("userId", isEqualTo: userId).getDocuments();
}
快照()
getUserById(String userId) async {
    return await _firestore.collection("users").where("userId", isEqualTo: userId).snapshots();
}
那有什么区别呢?

最佳答案

当您调用getDocuments()时,Firestore客户端会一次从服务器获取与查询匹配的文档。由于这可能需要一些时间,因此会返回Future<QuerySnapshot>
当您调用snapshots()时,Firestore客户端会获取文档,然后继续在服务器上的数据库中监视影响您查询的更改。因此,如果将文档写入影响您查询的users集合中,则会再次调用您的代码。因此,这将返回QuerySnapshot流。
在这两种情况下,整个查询的结果都在 QuerySnapshot object中。
我强烈建议阅读getting data oncelistening realtime updates上的Firestore文档。尽管它们不包含Flutter示例,但其中的解释同样适用于Flutter库。

08-05 11:17