如何将图像保存到 Firebase 存储并将 URL 保存到 firebase firestore?

How to save the Image to Firebase storage and save the URL to firebase firestore?

您好,我正在尝试保存从画廊或相机中挑选的图像。

Future<void> getImage({ImageSource source}) async {
    _pickedImage = await ImagePicker().getImage(source: source);
    if (_pickedImage != null) {
      _pickedImageFile = File(_pickedImage.path);
    }
  }

选择图像后,它必须将图像更新到 firebase 存储。

void _uploadImage(File image) async {
    Reference storageReference = FirebaseStorage.instance
        .ref()
        .child('UserImage')
        .child("UserImage/${user.uid}");
    UploadTask uploadTask = storageReference.putFile(image);

    //StorageTaskSnapshot taskSnapshot = await uploadTask.onComplete;
    uploadTask.then((newUrl) async {
      newUrl.ref.getDownloadURL();
      return imageUrl = newUrl.toString();
    }).catchError((onError) {
      print(onError);
    });

  }

问题是代码在 uploadTask.then((newUrl) 处中断,不允许以字符串形式获取下载 URL。然后它必须更新 firestore 集合的图像路径。

void userDetailsUpdate() {
    FirebaseFirestore.instance
        .collection("Manufacturer-Accounts")
        .doc(user.uid)
        .update({
      'Designation': designation.text,
      'FirstName': firstName.text,
      'LastName': lastName.text,
      //'Email': user.email,
      'Phone': phoneNumber.text,
      'UserImage': imageUrl == null ? "" : imageUrl,
    });
  }

因为它没有获取图像 url 所以它将值保存为“”。有办法吗?我已经使用了 Firebase 存储 ^5.0.1

我的完整源代码在这里

您的 _uploadImage 函数未返回任何内容,因此调用它的人永远无法下载 URL。

Future<String> _uploadImage(File image) async {
    Reference storageReference = FirebaseStorage.instance
        .ref()
        .child('UserImage')
        .child("UserImage/${user.uid}");
    UploadTask uploadTask = storageReference.putFile(image);

    await Future.value(uploadTask);

    var newUrl = await storageReference.getDownloadURL();

    return newUrl;
}

现在您可以调用此函数并通过以下方式获取下载 URL:

var downloadURL = await _uploadImage(file);