使用 Firebase 存储时未定义类 StorageReference

Mt *_*ifa 12 dart firebase flutter firebase-storage

我正在尝试上传图片,同样的过程适用于我的其他应用程序,但在这里它给出了这些错误,你们能帮忙吗?

Future getImage1() async {
    // ignore: deprecated_member_use
    var firstImage = await ImagePicker.pickImage(
        source: ImageSource.gallery, imageQuality: 65);
    setState(() {
      _image1 = firstImage;
    });
  }

Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

Pet*_*dad 37

从版本 firebase_storage 5.0.1 开始:

您必须执行以下操作:

FirebaseStorage storage = FirebaseStorage.instance;
Reference ref = storage.ref().child("image1" + DateTime.now().toString());
UploadTask uploadTask = ref.putFile(_image1);
uploadTask.then((res) {
   res.ref.getDownloadURL();
});
Run Code Online (Sandbox Code Playgroud)

StorageReferenceclass 已被删除,现在您必须使用 class ReferenceUploadTaskextends Task,它也实现了Future<TaskSnapshot>. 因此,类中的所有方法都可以在类Future上使用UploadTask

因此,要获取url图像的 ,您需要使用then()注册回调的方法,以便在此未来完成时调用。


小智 9

正如 @PeterHadad 提到的,Firebase Storage 5.0.1 中有一些重大变化。这些类已被重命名,但保留了大部分旧功能。

您还可以使用 .whenComplete() 获取下载 URL,如下所示 -

uploadPic(File _image1) async {
   FirebaseStorage storage = FirebaseStorage.instance;
   String url;
   Reference ref = storage.ref().child("image1" + DateTime.now().toString());
   UploadTask uploadTask = ref.putFile(_image1);
   uploadTask.whenComplete(() {
      url = ref.getDownloadURL();
   }).catchError((onError) {
    print(onError);
    });
   return url;
}
Run Code Online (Sandbox Code Playgroud)

  • uploadTask.whenComplete(() async { url = wait ref.getDownloadURL(); }).catchError((onError) { print(onError); }); (2认同)