FirebaseStorage.instance.ref()即将为空

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了FirebaseStorage.instance.ref()即将为空相关的知识,希望对你有一定的参考价值。

我想在我的Flutter应用程序中显示存储在Firbase存储上的图像,但我正在处理这个问题。我按照这个answer的说明,但我的ref()总是这样:

print

我创建此方法只是为了测试,当我尝试获取DownloadURL时,flutter抛出异常:

/ flutter(4664):══╡图像资源服务的异常情况╞═════════════════════════════════════════════════════════════════════════════════════════════════ = / flutter(4664):抛出以下ArgumentError解析图像编解码器:I / flutter(4664):无效参数:无主机在URI文件中指定:/// Instance%20of%20'Future'

  void _locateFile() async{
    final ref = FirebaseStorage.instance
        .ref()
        .child('avatars')
        .child('simples')
        .child('woman1.png');

    var url = Uri.parse(await ref.getDownloadURL() as String);
    print(url);
  }
}

这是图像信息:

info

所以,如果有人可以帮助我,我会非常高兴:)

答案

我想你想要删除as String演员阵容。现在你将它应用于ref.getDownloadURL()的结果。这当然不正确。你想await它返回的未来,而不是该对象的字符串版本。请注意,您尝试使用Uri.parse()解析的是“file:/// Instance%20of%20'Future'” - 请参阅“未来的实例”一词?

您也可以暂时删除Uri.parse(),并专注于理解getDownloadUrl()返回的未来中包含的值。一旦你理解了返回值,并且可以看到它包含你想要的东西,那么尝试用它做一些其他事情。

另一答案

我只是试图重现这个问题,但不知何故,这段代码对我来说很好:

var earringsRef = FirebaseStorage.instance.ref().child("EARRINGS.JPG");
var downloadURL = await earringsRef.getDownloadURL();
print(downloadURL);

var url = Uri.parse(await earringsRef.getDownloadURL() as String);
print(url);

两行都打印相同的URL:

扑:https://firebasestorage.googleapis.com/v0/b/project-8080059325282098184.appspot.com/o/EARRINGS.JPG?alt=media&token=0958acfc-3545-4af4-b38b-27a7ae38b20f

扑:https://firebasestorage.googleapis.com/v0/b/project-8080059325282098184.appspot.com/o/EARRINGS.JPG?alt=media&token=0958acfc-3545-4af4-b38b-27a7ae38b20f

以上是关于FirebaseStorage.instance.ref()即将为空的主要内容,如果未能解决你的问题,请参考以下文章

Firestore / Flutter - 如何获取文档 ID?

将图像从 Firebase 下载到 Flutter

如何使用颤振删除 Firebase 存储文件?

其他数据不会被推入数据库,只有图像

如何在 Flutter 中等待文件上传到 Firebase 存储?

Flutter 表单构建器包图像选择器 Firestore Flutter