我有一个包含2个字段的Cloud FireStore数据库。
下面是我如何从图像集中获取文档的方法。
class ImagePost {
final String imageUrl;
final User user;
const ImagePost(
{this.imageUrl,
this.user});
factory ImagePost.fromDocument(DocumentSnapshot document) {
User userInfo;
DocumentReference userReference = document['user'];
Future<DocumentSnapshot> userRef = userReference.get();
userRef.then((document) {
userInfo = User.fromJSON(document.data);
});
ImagePost post = new ImagePost(
imageUrl: document['imageUrl'],
user: userInfo // ==> always null while returning
);
return post;
}
}
获取参考用户文档时,post
对象始终包含用户字段的空值。我希望填充用户对象。
但是用户值检索得较晚,并且不会与post对象一起返回。
在返回帖子值之前,如何确保检索到用户值?
答案 0 :(得分:1)
这是因为get()
方法返回一个Future,并且您需要使用async
'await'来等待响应,但是无法在您的constructor
中使用它
只需创建一个方法(而不是构造函数)并像这样使用:
Future<ImagePost> getImagePostFromDocument(DocumentSnapshot document) async {
DocumentReference userReference = document['user'];
DocumentSnapshot userRef = await userReference.get();
User userInfo = User.fromJSON(userRef);
ImagePost post = new ImagePost(
imageUrl: document['imageUrl'],
user: userInfo
);
return post;
}
我建议您将其称为FutureBuilder