在 Flutter 中,如何使用 CachedNetworkImage 显示来自 Firebase 的离线图像?

Posted

技术标签:

【中文标题】在 Flutter 中,如何使用 CachedNetworkImage 显示来自 Firebase 的离线图像?【英文标题】:In Flutter how do I show offline images from Firebase using CachedNetworkImage? 【发布时间】:2018-10-30 07:20:45 【问题描述】:

我正在尝试让我的 Flutter 应用与 Firebase 脱机工作。我将对我的图像的引用存储在 Firestore 上,并将图像文件存储在 Storage 上。我让 Firestore 部分工作,我正在使用 CachedNetworkImageProvider 来显示我的图像,这些图像会缓存以供离线使用。但是当我离线时,即使图片被缓存了,我也无法获取图片的URL,所以我无法将它传递给CachedNetworkImageProvider,它以URL为key。

所以在离线时我知道图像路径,并且我将文件存储在设备上,我只需要一种获取 URL 的方法。

我是否需要手动将存储中的下载 URL 存储在设备上,以便我可以离线使用它们?还是有更好的办法?

获取网址的代码:

// this doesn't work offline
category.url = await storage
    .ref()
    .child("category_images/drawable-$DeviceInfo.dpiString")
    .child(document.data["media"]["src"])
    .getDownloadURL();

显示图像的代码:

image: new CachedNetworkImageProvider(_category.url),

【问题讨论】:

【参考方案1】:

您还需要保存 URL。一个好地方可能是您在 Firestore 中的图像参考。

另一个选项是使用本地文件,因为您说您知道路径,但我认为通过 URL 引用更简洁。

【讨论】:

我以为我不应该因为令牌而保存 URL,但你的回答让我挖了北斗,我发现令牌实际上与内容相关,而不是用户或日期,这意味着我可以存储和使用它。我会接受你的回答。谢谢!

以上是关于在 Flutter 中,如何使用 CachedNetworkImage 显示来自 Firebase 的离线图像?的主要内容,如果未能解决你的问题,请参考以下文章

Flutter-如何在flutter的整个应用程序生命周期中将数据保存在内存中?

如何在 Flutter 中使用 GestureDetector 隐藏 appBar?

如何在 Flutter 的原生 C++ 中使用 OpenCV 4(2021 年)(支持 Flutter 2.0)? [关闭]

如何在flutter中使用rootBundle加载图片?

如何在 Dart / Flutter 中使用另一个文件的函数?

在 Flutter 中,我们如何使用 Firebase Messaging onBackgroundMessage 创建通知,使用flutter_local_notifications?