【发布时间】:2021-11-30 23:47:47
【问题描述】:
我只需要从 Firestore 检索一个文档并将其数据存储在一个名为 Artista 的自定义类中。
为了达到这个目的,我使用了FutureBuilder。它的用法对我来说不是很清楚,但我认为我使用它很好,问题是我猜是如何读取文档数据,因为当FutureBuilder 被调用时,这是错误:
The method '&' was called on null.
Receiver: null
Tried calling: &(4294967295)
我认为我没有以正确的方式读取快照数据,所以问题应该是 Artista.fromDocumentSnapshot 工厂方法,但我会放整个代码。
重要信息是:cloud_firestore: ^2.4.0
这是 StreamBuilder :
FutureBuilder<DocumentSnapshot<Map<String, dynamic>>>(
future: widget.database.getFutureArtistById(widget.name),
builder: (BuildContext context,
AsyncSnapshot<DocumentSnapshot<Map<String, dynamic>>> snapshot) {
if (snapshot.hasError) {
return const Text('Error');
} else if (snapshot.hasData && !(snapshot.data.exists)) {
return Text("User does not exist");
} else if (snapshot.connectionState == ConnectionState.done &&
snapshot.data.exists &&
snapshot.data != null) {
Artista artistaTrovato = Artista.fromDocumentSnapshot(snapshot);
if (artistaTrovato != null) {
print(artistaTrovato.toString());
}
return Artists_Showroom(
artistaCorrente: widget.artista,
database: widget.database,
lista: [artistaTrovato]);
} else if (!snapshot.hasData)
return Center(
child: Container(
child: Text("No user found"),
));
else
return Center(
child: CircularProgressIndicator(),
);
}),
这是要解决的未来:
Future<DocumentSnapshot<Map<String, dynamic>>> getFutureArtistById(
String id) async {
return await FirebaseFirestore.instance
.collection("ids")
.doc("tabs")
.collection(id[0])
.doc(id)
.get();
}
这是读取快照的方法(Artista.fromDocumentSnapshot):
factory Artista.fromDocumentSnapshot(
AsyncSnapshot<DocumentSnapshot<Map<String, dynamic>>> doc) {
return Artista(
bio: doc.data.data()["bio"],
regione: doc.data.data()["regione"],
citta: doc.data.data()["citta"],
comune: doc.data.data()["comune"],
foto: doc.data.data()["foto"],
nome: doc.data.data()["nome"],
settore: doc.data.data()["settore"],
lavoro: doc.data.data()["lavoro"],
progetti: doc.data.data()["progetti"],
id: doc.data.data()['id'],
posts: doc.data.data()["posts"],
);
}
我读得好吗?有什么想法吗?
【问题讨论】:
标签: firebase flutter google-cloud-firestore future flutter-futurebuilder