我有下面的代码,我从firebase存储中获取一个图像作为一个图像。现在,我想把这个图像存储在我的CachedNetworkImage中,这样我就不必每次都从DB中获取它。由于cachednetworkimage需要一个URL,而我正在获取一个图像,我如何使用cachednetworkimage?
这是我的代码
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,
],
));
}
}```
7条答案
按热度按时间azpvetkf1#
缓存的网络图像和Flutter缓存管理器
Cached network image包依赖于另一个名为Flutter缓存管理器的包来存储和检索图像文件。
∮ ∮ ∮ ∮
你需要下载你的图像文件,并使用软件包将它们放入缓存。下面是一个示例代码,它从Firebase存储中获取文件及其下载URL,并将它们放入缓存:
∮ ∮ ∮ ∮
接下来,您将使用
CacheNetworkImage
小部件,如documentation中所示。如果您使用Flutter缓存管理器将图像文件放入缓存中,缓存网络图像将直接从缓存中检索它们。如果您的图像文件过期或缓存被清除,它将下载并将它们放入缓存中。
完整示例
e5nqia272#
尝试使用firebase_image package. From here的方法,您需要同步图像URL(selfies/me2.jpg)和桶URL(gs:my-project.appspot.com)
sshcrbum3#
我不是消防站的用户,但这应该工作。
它可能需要一点修改或东西,请在评论中分享更新我的答案根据这一点
您可以按如下方式获取文件对象。
并使用image_gallery_saver保存它,因此代码应如下所示
falq053o4#
对于您的存储示例,请使用如下方法
of1yzvn45#
为了让它与Firebase存储一起工作,并包含离线功能,我对它进行了这样的更改
hs1ihplo6#
对于任何人仍然坚持这一点..尝试这不需要黑客和使用CachedNetworkImageProvider内置的检索方法。
第一屏:
然后第二个屏幕
CachedNetworkImageProvider知道如何使用URL检索缓存的图像。
23c0lvtd7#
查看cached_network_image: ^2.5.0软件包。
如何使用它?