Flutter Firebase 存储期货问题

Posted

技术标签:

【中文标题】Flutter Firebase 存储期货问题【英文标题】:Flutter Firebase Storage Futures issue 【发布时间】:2020-10-13 13:11:33 【问题描述】:

我在下面的函数中遇到了一些问题。该函数正在处理来自 Firebase 存储的异步获取。我正在使用它来获取我存储在那里的文件的名称和 url。 问题在于获取网址。具体就行了:

String url = element.getDownloadURL().toString();

getDownloadedURL() 是 Firebase 的未来。我试图等待它,但它不会识别等待,我猜是由于“元素”。 总体效果是,当我通过 Future 构建器在我的 UI 中使用它时,名称显示得很好,但 Url 没有。正在检索它,因为打印语句显示它。但它没有被等待,所以 UI 已经更新。 尝试了很多东西,但还没有找到解决方案,所以任何帮助将不胜感激。

Future<void> getImageData() async 
final imagesFromStorage = await fb
    .storage()
    .refFromURL('gs://little-big-deals.appspot.com')
    .child('images')
    .listAll();

imagesFromStorage.items.forEach((element) 
  print(element.name);
  String url = element.getDownloadURL().toString();
  print(url.toString());
  imageData.add(ImageData(element.name, url.toString()));
);

非常感谢

【问题讨论】:

【参考方案1】:

你不能在 forEach 中使用异步。

只需使用 for 循环:

Future<void> getImageData() async 
  final imagesFromStorage = await fb
      .storage()
      .refFromURL('gs://little-big-deals.appspot.com')
      .child('images')
      .listAll();

  for (var element in imagesFromStorage.items) 
    print(element.name);
    String url = (await element.getDownloadURL()).toString();
    print(url.toString());
    imageData.add(ImageData(element.name, url.toString()));
  

【讨论】:

我很高兴,我曾经在这个上花了很多时间所以......我知道这种感觉;)

以上是关于Flutter Firebase 存储期货问题的主要内容,如果未能解决你的问题,请参考以下文章

Flutter firebase setData()函数在完成异步函数之前将空值分配给字段

Flutter : getDownloadUrl (firebase 存储)

在 Flutter 中访问 Firebase 存储

无论如何都可以将firebase存储用于flutter桌面吗?

Flutter - 将图像上传到 Firebase 存储

Flutter - 将图像上传到 Firebase 存储