我可以使用StreamBuilder在Firestore中听一个文档吗?

Nau*_*zet 4 dart firebase flutter google-cloud-firestore

我正在尝试在集合的单个文档中收听更改,但是无法正常工作。

Widget build(BuildContext context) {
  return StreamBuilder(
    stream: Firestore.instance.collection("events").document(widget.documentID).get().asStream(),
    ...
  }
}
Run Code Online (Sandbox Code Playgroud)

我正在使用.asStream()方法,但是我只得到一次文档。如果我在Firebase控制台中更改数据,除非重新打开视图,否则不会更新。

有没有办法做到这一点?

cre*_*not 6

你只得到了一次文件的原因是因为该DocumentReference.get方法原本只返回Future和使用asStream将只返回一个单一 FutureStream

cloud_firestore但是,该软件包具有内置的方法,可以正确侦听文档。
您可以DocumentReference.snapshots改用,它返回Stream该文档的每次更改的。

在您的代码中,您只需替换.get().asStream().snapshots()

  • 好答案。我什至不知道存在`DocumentReference.snapshots()`,对于这个用例来说很棒。在其他平台上,您必须对`FieldPath.documentId`进行查询,如Denys的答案所示:/sf/answers/3657658511/ (3认同)