Flutter Firebase 上传多张图片

Posted

技术标签:

【中文标题】Flutter Firebase 上传多张图片【英文标题】:Flutter Firebase upload multiple images 【发布时间】:2020-08-14 04:05:44 【问题描述】:

上传多张图片并等待URL列表,几秒钟后图片成功加载到firestore并返回url,但在此之前future函数返回null

Future<List<dynamic>> uploadImage() async 
     _imageFile.forEach((image) async 
      String rannum = Uuid().v1();
      StorageReference reference =
          FirebaseStorage.instance.ref().child('Reviews').child(rannum);
      StorageUploadTask uploadTask = reference.putFile(image);
      StorageTaskSnapshot downloadUrl = (await uploadTask.onComplete);
      String _url = await downloadUrl.ref.getDownloadURL();
      _urllist.add(_url);
    );

    return _urllist;
  

【问题讨论】:

【参考方案1】:

你必须像这样调用你的函数:

uploadImage(_imageFile).then((List<String> urls) => urls.forEach((element) => print(element)))

我也改变了你的功能:

Future<List<String>> uploadImage(List<File> _imageFile) async 
    List<String> _urllist = [];
    await _imageFile.forEach((image) async 
      String rannum = Uuid().v1();
      StorageReference reference =
      FirebaseStorage.instance.ref().child('Reviews').child(rannum);
      StorageUploadTask uploadTask = reference.putFile(image);
      StorageTaskSnapshot downloadUrl = await uploadTask.onComplete;
      String _url = await downloadUrl.ref.getDownloadURL();
      _urllist.add(_url);
    );

    return _urllist;
  

我也不明白你为什么用括号括起来“await uploadTask.onComplete”

【讨论】:

谢谢,我尝试了你的建议,但它不起作用。仍然收到空白列表 是的,您必须将下载 url 存储为 String 而不是 Dynaminc,我更新了我的答案 我试过这个选项,但我仍然面临同样的问题。在多张图片上传时,该功能不会等待所有下载 URL。我已经用 future.delayed 更改了函数。 你能发布你如何称呼这个未来吗?因为它是 Future,所以它是异步的,你必须等待答案 我使用 .then 作为 uploadImage().then((photourl)

以上是关于Flutter Firebase 上传多张图片的主要内容,如果未能解决你的问题,请参考以下文章

Flutter 无法上传从 multi_image_picker 获取的多张图片

将多张图片上传到 Firebase 并检索到 viewpage

React Native Firebase 多张图片上传问题

使用 Google Firebase 同时上传多张图片

如何使用 HTTP 将多张图片上传到 Flutter 中的 Rest API?

我正在将多张图片上传到 Firebase 并已完成,但我无法将 url 链接保存到列表中