Flutter如何缓存图片?

问题

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

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

那么该如何解决呢?

回复
阅读 2.9k
2 个回答

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

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

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

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

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

推荐问题
宣传栏