我发现了以下问题。然后我明白了。
Flutter / FireStore: how to display an image from Firestore in Flutter?
文件上传成功。
var imgUrl = await ref.getDownloadURL();
print(imgUrl.toString());
但是我有以下错误。看来我也一样。
未处理的异常:PlatformException(错误-13010,FIRStorageErrorDomain,对象images / cars / 40711b90-9db4-11ea-c602-a557c9b7697a.jpeg不存在。]
但是我不知道如何显示和处理它。
请给我建议。谢谢。
您需要先将网址添加到Firestore:
StorageTaskSnapshot snapshot = await storage
.ref()
.child("images/$imageName")
.putFile(file)
.onComplete;
if (snapshot.error == null) {
final String downloadUrl =
await snapshot.ref.getDownloadURL();
await Firestore.instance
.collection("images")
.add({"url": downloadUrl, "name": imageName});
}
现在在Firestore中,您将拥有名为images
的集合,并带有图像URL和图像名称的文档。方法getDownloadUrl()
返回图像的url,因此您可以将其存储在Firestore中。然后要显示它,您可以执行以下操作:
body: Container(
padding: EdgeInsets.all(10.0),
child: FutureBuilder(
future: getImages(),
builder: (context, AsyncSnapshot<QuerySnapshot> snapshot) {
if (snapshot.connectionState == ConnectionState.done) {
return ListView.builder(
shrinkWrap: true,
itemCount: snapshot.data.documents.length,
itemBuilder: (BuildContext context, int index) {
return ListTile(
contentPadding: EdgeInsets.all(8.0),
title:
Text(snapshot.data.documents[index].data["name"]),
leading: Image.network(
snapshot.data.documents[index].data["url"],
fit: BoxFit.fill),
);
});
} else if (snapshot.connectionState == ConnectionState.none) {
return Text("No data");
}
return CircularProgressIndicator();
},
),
),
/// code here
Future<QuerySnapshot> getImages() {
return fb.collection("images").getDocuments();
}
这里您使用方法getImages()
从集合images
中检索所有图像。要显示图像,可以使用Image.network
小部件。