使用Firebase Storage时未定义的类StorageReference

6mzjoqzu  于 2023-03-24  发布在  其他
关注(0)|答案(5)|浏览(124)

我试图上传图像,同样的过程是我的其他应用程序的工作,但在这里它给这些错误,你能帮家伙plz?

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

eanckbw9

eanckbw91#

从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类已经被删除,现在你必须使用类ReferenceUploadTask扩展了Task,它也实现了Future<TaskSnapshot>。因此,类Future中的所有方法都可以在类UploadTask上使用。
因此,要获取图像的url,您需要使用then()方法,该方法注册了一个回调,以便在此future完成时调用。

yhived7q

yhived7q2#

正如@PeterHadad所提到的,在firebase存储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;
}
ddhy6vgd

ddhy6vgd3#

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

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作为依赖项。

k4emjkb1

k4emjkb14#

看起来你没有在pubspec.yaml文件中添加依赖项,或者你没有在你的dart文件中导入包。这就是为什么你得到错误。
查看软件包站点,了解如何用途:https://pub.dev/packages/firebase_storage

mbzjlibv

mbzjlibv5#

如果你想要一个返回url的函数,你可以使用

Future<String> uploadPicture(XFile image, Reference ref) async {
    File imageFileToSave = File(image.path);

    UploadTask uploadTask = ref.putFile(imageFileToSave);
    String url = await uploadTask.then((res) {
      return res.ref.getDownloadURL();
    });
    return url;
  }

现在要通过调用这个函数来检索url,只需执行以下操作:

String imageUrl = await uploadPicture(newImage, ref);

相关问题