Flatter将多个图像上载到firebase

Flatter将多个图像上载到firebase,firebase,flutter,dart,firebase-storage,Firebase,Flutter,Dart,Firebase Storage,当我想上传多张图片时,我面临着这个问题。 我有一个保存“文件”的列表。我读了更多关于它的文章,发现: Future<List> uploadImage(List<Object> _imageFile) async { final user = await FirebaseAuth.instance.currentUser(); List _urllist = []; int i = 0; await _imageFile.forEach(

当我想上传多张图片时,我面临着这个问题。 我有一个保存“文件”的列表。我读了更多关于它的文章,发现:

Future<List> uploadImage(List<Object> _imageFile) async {
    final user = await FirebaseAuth.instance.currentUser();
    List _urllist = [];

    int i = 0;
    await _imageFile.forEach((image) async {
      print('igen: ' + image.toString());
      
        // if (ref.getMetadata() != null) {   //should be deleted, but this isn't working
        //   await ref.delete();
        // }
        print(image.imageFile);
        final ref = FirebaseStorage.instance
            .ref()
            .child('business_image')
            .child(user.uid)
            .child(i.toString() + '.jpg');
        i++;
        StorageUploadTask uploadTask = ref.putFile(image.imageFile);
        StorageTaskSnapshot downloadUrl = await uploadTask.onComplete;
        String _url = await downloadUrl.ref.getDownloadURL();
        _urllist.add(_url);
      
    });
    print(_urllist);

    return _urllist;
}

这个功能有什么问题,有人能帮我解决吗?

我所做的是,当用户从手机中选择或拍摄照片时,它会将图像添加到
列表图像中,
,我相信您可能已经自己实现了

关于上传这些图像,我所做的是,它将图像批量上传到firebase存储,然后使用每个用户的url,如果这是您想要的,那么这是我的代码

  Future handleUploadImage() async {
    var firebaseUser = await FirebaseAuth.instance.currentUser();

    var uuid = new Uuid();

    try {
      for (int i = 0; i < widget.images.length; i++) {
        final StorageReference storageRef =
            FirebaseStorage.instance.ref().child(uuid.v4());
        final StorageUploadTask task = storageRef
            .child('user_images/${firebaseUser.uid}/')
            .putFile(widget.images[i]);
        await task.onComplete.then((picValue) async {
          await picValue.ref.getDownloadURL().then((downloadUrl) {
            print("URL : " + downloadUrl);
            imageUrl.add(downloadUrl);
          });
        });
      }
    } catch (e) {
      print(e);
    }
  }
Future handleUploadImage()异步{
var firebaseUser=等待FirebaseAuth.instance.currentUser();
var uuid=新的uuid();
试一试{
对于(int i=0;i

请记住我的用户uuid包生成不同的图像URL

您看到了什么错误没有错误,它只是简单地返回null。所以我上传了一个空列表到firebase。问题在于返回,函数在生成所有imageUrl之前就返回了。我不明白为什么,但它甚至没有打印URL,我的imageUrl列表仍然是空的……我这样调用你的函数:handleUploadImage()。然后((值){Firestore.instance.collection('users')).document(user.uid).updateData({'email':widget.userData['email'],…etc'userImage':allimagerurls,});setState((){isUpload=false;});});在本例中,您的imageUrl是我的allimageurl。但是打印(“URL:+下载URL”);永远不要执行它对我有用。您的图像数组可能为空,或者将图像添加到数组的方式可能存在错误
  Future handleUploadImage() async {
    var firebaseUser = await FirebaseAuth.instance.currentUser();

    var uuid = new Uuid();

    try {
      for (int i = 0; i < widget.images.length; i++) {
        final StorageReference storageRef =
            FirebaseStorage.instance.ref().child(uuid.v4());
        final StorageUploadTask task = storageRef
            .child('user_images/${firebaseUser.uid}/')
            .putFile(widget.images[i]);
        await task.onComplete.then((picValue) async {
          await picValue.ref.getDownloadURL().then((downloadUrl) {
            print("URL : " + downloadUrl);
            imageUrl.add(downloadUrl);
          });
        });
      }
    } catch (e) {
      print(e);
    }
  }