我正在构建一个Flutter应用程序,我无法理解如何实现Firestore。在我看过的教程中,我只看到如何创建整个集合的快照,但在我的情况下,我的集合是用户,所以我只需要对特定用户的文档进行快照。 Firebase文档似乎没有关于如何执行此操作的文档,也没有关于FlutterFire GitHub页面的大量文档。请帮忙!
这是我尝试使用StreamBuilder构建的Widget。
@override
Widget build(BuildContext context) {
return new StreamBuilder(
stream: Firestore.instance.collection('users').document(userId).snapshots(),
builder: (context, snapshot) {
return new ListView.builder(
itemCount: //what do I put here?,
itemBuilder: (context, index) => new Item(//And here?),
);
}
);
}
答案 0 :(得分:7)
假设您要使用文档中的name参数创建Text
Widget build(BuildContext context) {
return new StreamBuilder(
stream: Firestore.instance.collection('users').document(userId).snapshots(),
builder: (context, snapshot) {
if (!snapshot.hasData) {
return new Text("Loading");
}
var userDocument = snapshot.data;
return new Text(userDocument["name"]);
}
);
}
这只是一个例子。每次更改文档本身时,在文档上创建StreamBuilder都会自行重建。您可以尝试此代码,然后转到控制台并更改“名称”值。您的应用会自动反映更改。
您可以构建使用流中数据的整个树,而不只是一个Text
。
如果您想获得文档的当前值,可以通过解析文档引用的Future
get()
方法来实现。
var document = await Firestore.instance.collection('users').document(userId).get(),
答案 1 :(得分:1)
每个元素都应在代码的后面强制转换为引用。
return new StreamBuilder<DocumentSnapshot>(
stream: Firestore.instance.collection('users').document(userId).snapshots(), //returns a Stream<DocumentSnapshot>
builder: (BuildContext context, AsyncSnapshot<DocumentSnapshot> snapshot) {
if (!snapshot.hasData) {
return new Text("Loading");
}
var userDocument = snapshot.data;
return new Text(userDocument["name"]);
}
);
}