来自Firebase存储的颤动加载图像

问题描述 投票:8回答:4

我看到有很多关于如何使用flutter上传图像到firebase存储的例子,但没有关于实际下载/读取/显示已经上传的图像的内容。

在Android中,我只是使用Glide来显示图像,我如何在Flutter中这样做?我是否使用NetworkImage类,如果是这样,我如何首先获取存储在存储中的图像的URL?

dart flutter
4个回答
7
投票

更新

在较新的版本中使用

await ref.getDownloadURL();

How to get full downloadUrl from UploadTaskSnapshot in Flutter?

原版的

someMethod() async {
  var data = await FirebaseStorage.instance.ref().child("foo$rand.txt").getData();
  var text = new String.fromCharCodes(data);
  print(data);
}

Download an image from Firebase to Flutter

要么

final uploadTask = imageStore.putFile(imageFile);
final url = (await uploadTask.future).downloadUrl;

在后一种情况下,您需要将downloadUrl存储在某处,然后使用NetworkImage或类似物来渲染它。


6
投票

Firebase Console

要查看存储中的图像,您需要的是存储中文件的名称。获得所需特定图像的文件名后。在我的情况下如果我想要加载testimage,

final ref = FirebaseStorage.instance.ref().child('testimage');
// no need of the file extension, the name will do fine.
var url = await ref.getDownloadURL();
print(url);

一旦你有了网址,

Image.network(url);

就这样 :)


2
投票

以下是有状态窗口小部件的示例,该窗口小部件从Firebase存储对象加载图像并构建Image对象:

class _MyHomePageState extends State<MyHomePage> {

  final FirebaseStorage storage = FirebaseStorage(
      app: Firestore.instance.app,
      storageBucket: 'gs://my-project.appspot.com');

  Uint8List imageBytes;
  String errorMsg;

  _MyHomePageState() {
      storage.ref().child('selfies/me2.jpg').getData(10000000).then((data) =>
                setState(() {
                  imageBytes = data;
                })
        ).catchError((e) =>
                setState(() {
                  errorMsg = e.error;
                })
        );
  }

  @override
  Widget build(BuildContext context) {
    var img = imageBytes != null ? Image.memory(
        imageBytes,
        fit: BoxFit.cover,
      ) : Text(errorMsg != null ? errorMsg : "Loading...");

    return new Scaffold(
        appBar: new AppBar(
          title: new Text(widget.title),
        ),
        body: new ListView(
          children: <Widget>[
            img,
          ],
        ));
  }
}

请注意,FirebaseApp初始化由Firestore类处理,因此不需要进一步的初始化代码。


0
投票

您可以在firebase控制台中打开该文件,然后复制存储位置URL(右下角),然后在您的flutter应用程序中,您可以执行以下操作。

    Future _getImageUrl() async {
      final Future<StorageReference> ref =
          FirebaseStorage.instance.getReferenceFromUrl('gs://...');
      dynamic url = await ref.then((doc) => doc.getDownloadURL());
      print(url);
    }
© www.soinside.com 2019 - 2024. All rights reserved.