FirebaseStorage.instance.ref()为空

时间:2018-12-30 00:03:56

标签: firebase flutter firebase-storage

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

print

我创建此方法只是为了测试,当我尝试获取DownloadURL时,抖动会引发异常:

  

/ flutter(4664):IM图像资源服务引起的异常CA ═════════════════════   I / 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

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

2 个答案:

答案 0 :(得分:1)

我想您想删除as String强制转换。目前,您正在将其应用于ref.getDownloadURL()的结果。那肯定是不正确的。您想await返回它的未来,而不是该对象的字符串版本。请注意,您尝试使用Uri.parse()进行解析的是“ file:/// Instance%20of%20'Future'”-看到“未来的实例”一词吗?

您也可以暂时删除Uri.parse(),而只专注于理解getDownloadUrl()返回的将来所包含的值。了解返回值并可以看到它包含所需的内容后,请尝试使用该返回值做其他事情。

答案 1 :(得分:1)

我只是想重现该问题,但是以某种方式,该代码对我来说很好用:

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