如何使用Flutter在Firestore中显示图像文件

问题描述 投票:0回答:1

我发现了以下问题。然后我明白了。

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不存在。]

但是我不知道如何显示和处理它。

请给我建议。谢谢。

firebase flutter dart google-cloud-firestore firebase-storage
1个回答
2
投票

您需要先将网址添加到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小部件。

© www.soinside.com 2019 - 2024. All rights reserved.