Flutter如何缓存图片?

问题

在Flutter中, 使用CacheNetworkImage对图片进行了加载, 但是目前遇到的问题是, 我使用了shared_preferences存储用户的头像链接, 导致每次打开这个页面, 头像都会闪烁(从placeholder切换至链接)

shared_prefernces貌似返回的是Future属性必须在异步函数中, 如果在Widget部件中使用Async,会返回Future不是Widget的字类型(Future<XXX> is not a subtype of Widget)

那么该如何解决呢?

阅读 4.4k
2 个回答

flutter加载图片的能力是很明显的没有原生强,如果是本地缓存的图片打开会闪烁。你最好能在缓存前先压缩下图片,压缩到实际尺寸*3的大小,基本不会闪烁。

如果一定要提前加载到内存中,可以调用这个方法:

Future<void> precacheImage(
  ImageProvider provider,
  BuildContext context, {
  Size? size,
  ImageErrorListener? onError,
})

用的时候需要注意context,如果要立即缓存,在initState中使用是没有context的,需要在WidgetsBinding.instance.addPostFrameCallback中使用。

使用ExtendedImage等库时,请注意同时使用ExtendedNetworkImageProviderImageProvider.

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题