【问题标题】:Flutter Firebase upload multiple imagesFlutter Firebase 上传多张图片
【发布时间】: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;
  }

【问题讨论】:

    标签: firebase flutter firebase-storage


    【解决方案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) {}
    猜你喜欢
    • 2020-12-05
    • 2017-06-29
    • 2018-05-21
    • 2021-08-11
    • 2020-06-24
    • 2018-02-26
    • 2019-11-15
    相关资源
    最近更新 更多