【问题标题】:Undefined class StorageReference when using Firebase Storage使用 Firebase 存储时未定义的类 StorageReference
【发布时间】:2021-02-22 02:36:14
【问题描述】:

我正在尝试上传图片,并且我的其他应用程序正在使用相同的过程,但是这里给出了这些错误,请您帮忙吗?

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

【问题讨论】:

  • 你加了firebase_storage?
  • 是的,我做过 @PeterHaddad

标签: firebase flutter dart firebase-storage


【解决方案1】:

从版本 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();
});

StorageReference 类已被删除,现在您必须使用 Reference 类。 UploadTask 扩展了Task,它也实现了Future<TaskSnapshot>。因此Future 类中的所有方法都可以在UploadTask 类上使用。

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

【讨论】:

    【解决方案2】:

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

    也可以使用 .whenComplete() 获取下载地址如下-

    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;
    }
    

    【讨论】:

    • uploadTask.whenComplete(() async { url = await ref.getDownloadURL(); }).catchError((onError) { print(onError); });
    【解决方案3】:

    从图库中选择图像并将其存储在图像文件夹中的 Firebase 存储中,如下所示:

    final XFile? image = await ImagePicker().pickImage(source: source);
    FirebaseStorage storage = FirebaseStorage.instance;
    Reference ref = storage.ref().child("images/"+DateTime.now().toString());
    UploadTask uploadTask = ref.putFile(File(image!.path));
    uploadTask.then((res) {
      res.ref.getDownloadURL();
    });
    

    确保在 pubspec.yaml 文件中添加 image_picker 和 firebase_storage 作为依赖项。

    【讨论】:

      【解决方案4】:

      看起来您没有在 pubspec.yaml 文件中添加依赖项或 也许你没有在你的 dart 文件中导入包。这就是为什么你得到 错误。

      查看软件包站点,例如如何使用: https://pub.dev/packages/firebase_storage

      【讨论】:

        猜你喜欢
        • 2021-02-23
        • 2018-05-26
        • 2018-06-19
        • 2020-07-19
        • 2019-05-11
        • 2018-05-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多