我试图在一个集合的单个文档中侦听更改,但是我无法使其正常工作。
Widget build(BuildContext context) {
return StreamBuilder(
stream: Firestore.instance.collection("events").document(widget.documentID).get().asStream(),
...
}
}
我正在使用 .asStream()方法,但是我只得到一次文档。如果我在Firebase控制台中更改数据,除非重新打开视图,否则什么都不会更新。
有没有办法做到这一点?
答案 0 :(得分:6)
之所以只获取一次文档,是因为DocumentReference.get
方法最初仅返回一个Future
,而使用asStream
仅返回一个 一个 单 Future
到Stream
。
然而,cloud_firestore
程序包具有一种内置的方法,可以正确侦听文档。
您可以改用DocumentReference.snapshots
,它返回该文档每次更改的Stream
。
在您的代码中,您只需将.get().asStream()
替换为.snapshots()
。
答案 1 :(得分:0)
如果您想获得单个文档,请使用 Future builder 而不是 Stream Builder。
FutureBuilder<DocumentSnapshot>(
future: Firestore.instance
.collection('users')
.document(widget.puid)
.get(),
builder: (context,
AsyncSnapshot<
DocumentSnapshot>
snapshot) {
if (snapshot.hasError)
return Center(
child: Text(snapshot
.hasError
.toString()),
);
return snapshot.hasData
? Text(
"${snapshot.data['username']}",
style: TextStyle(
color:
kPrimaryColor,
fontSize: 18,
fontWeight:
FontWeight
.bold),
)
: Container();
},
),