使用 Firebase 存储时未定义的类 StorageReference

Posted

技术标签:

【中文标题】使用 Firebase 存储时未定义的类 StorageReference【英文标题】:Undefined class StorageReference when using Firebase Storage 【发布时间】: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 【参考方案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

【讨论】:

以上是关于使用 Firebase 存储时未定义的类 StorageReference的主要内容,如果未能解决你的问题,请参考以下文章

使用函数和 Firestore 时未定义字段值

使用 multer 将图像上传到 Firebase 存储问题

使用 react-native-firebase 在 Android 中关闭应用程序时未收到 fcm 消息

Firebase:使用预留托管 URL 时未创建 Firebase 应用“[DEFAULT]”

如何在 FirebaseStorage 中使用 StreamBuilder 来通知我的应用我的 Firebase 存储发生变化?在颤振中

使用 Firebase 云消息传递 (FCM) 时未调用 AppDelegate 方法