如何使用flutter从Firebase获取下载URL?

时间:2019-06-18 11:58:57

标签: firebase flutter dart firebase-storage

我想在firbase存储中检索私有映像的下载URL。

您好尝试了该网站上的许多建议,但所有建议最终都得到相同的结果。

我尝试了以下代码:

getImageNow() async {
    StorageReference ref =
    FirebaseStorage.instance.ref().child("/1.jpg");
    String url = (await ref.getDownloadURL()).toString();
    return url;
  }

当我在函数内打印url时它起作用,但是当我尝试调用print(getImageNow())来获取url时,我只是得到了"Instance of 'Future<dynamic>'"

更新*************

最后,我试图得到这样的东西:

return Image.network(
  getImageNow(),
);

但是我无法使其与异步一起工作。

2 个答案:

答案 0 :(得分:2)

由于getImageNow()是异步的(如async关键字所示),因此您将需要使用await来使调用代码等待结果:

print(await getImageNow())

await在这里所做的是,它实际上可以将Future展开,并且等效于:

getImageNow().then((value) => print(value));

答案 1 :(得分:1)

这就是我上传并获取下载网址的方式

这部分是我如何从选择器中获取图像

 Future getImage() async {
  var image = await ImagePicker.pickImage(source: ImageSource.gallery);

  setState(() {
    _image = image;
      print('Image Path $_image');
  });
}

然后我上传

 Future uploadPic(BuildContext context) async {

  String fileName = basename(_image.path);
  StorageReference firebaseStorageRef = FirebaseStorage.instance.ref().child(fileName);
  StorageUploadTask uploadTask = firebaseStorageRef.putFile(_image);
  StorageTaskSnapshot taskSnapshot = await uploadTask.onComplete;


  final String url = (await taskSnapshot.ref.getDownloadURL());
  print('URL Is $url');
}

希望它将对某人有所帮助