使用Flutter Firebase上传多张图片

3

上传多张图片并等待 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个回答

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"括起来。


谢谢,我尝试了你的建议,但它并没有起作用。我仍然收到一个空列表。 - Flutter_Raj
是的,您必须将下载链接存储为字符串而不是动态的。我已经更新了我的答案。 - Milvintsiss
我尝试了这个选项,但仍然面临着相同的问题。在多图上传时,该函数不会等待所有下载URL。我已经使用future.delayed更改了该函数。 - Flutter_Raj
你能分享一下你是如何调用这个Future的吗?因为它是异步的,你必须等待答案。 - Milvintsiss
我正在使用.then作为uploadImage()。.then((photourl) {} - Flutter_Raj
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接