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 存储)