Flutter Firebase 存储期货问题
Flutter Firebase Storage Futures issue
我在下面的函数中遇到了一些问题。该函数正在处理来自 Firebase 存储的异步获取。我用它来获取我存储在那里的文件的名称和 URL。
问题在于获取 Urls。具体上线:
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()));
});
}
非常感谢
您不能在 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()));
}
}
我在下面的函数中遇到了一些问题。该函数正在处理来自 Firebase 存储的异步获取。我用它来获取我存储在那里的文件的名称和 URL。 问题在于获取 Urls。具体上线:
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()));
});
}
非常感谢
您不能在 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()));
}
}