Flutter 使用cached_image_network优化图片加载体验

 更新时间:2021年05月28日 09:51:08   作者:岛上码农  
在 Flutter 中,cached_image_network 即提供了缓存网络图片功能,同时还提供了丰富的加载过程指示。本文就来看下cached_image_network的具体使用

在 App 中会经常遇到需要从后台拉取图片的场景,这一方面会给服务器带来网络带宽消耗,另一方面加载图片的等待过程也会影响用户体验。因此,往往会在 App 端对图片做缓存机制,以避免同一张图片反复发起请求。这个时候cached_image_network就派上用场了

上一篇Flutter 给列表增加下拉刷新和上滑加载更多功能,我们使用了列表,其中列表中有从网络下载图片。直接使用 Flutter 自带的 Image.network 下载图片一是无法缓存,二是体验不够好。熟悉 iOS 的肯定知道 SDWebImage,即 Objective-C 上用得最广泛的图片缓存开源组件。与 SDWebImage 类似,Flutter 的 cached_image_network 插件也实现了这样的功能。cached_image_network 使用十分简单,首先在 pubspec.yaml 中添加依赖:

dependencies:
  flutter:
    sdk: flutter

  # ...其他依赖
  cached_network_image: ^3.0.0

之后在需要使用 cached_image_network 的地方引入源码:

import 'package:cached_network_image/cached_network_image.dart';

最后在需要加载网络图片的地方使用cached_image_network 替代原有的图片加载方式(如 Image.network):

CachedNetworkImage(imageUrl: "http://via.placeholder.com/350x150"),

以上是 cached_image_network 最简单的用法,当然为了用户体验更好,推荐是使用占位图或加载指示器的方式提示用户图片正在加载。

使用占位图

CachedNetworkImage 提供了占位图和加载失败后的错误指示的方法用于静态指示。我们分别准备 image-default.png 和 image-failed.png 文件表示默认占位图和加载失败后的占位图,然后用 CachedNetworkImage 构造方法的 placeholder 和 errorWidget 来使用占位图,如下所示:

Widget _imageWrapper(String imageUrl) {
    return SizedBox(
      width: 150,
      height: ITEM_HEIGHT,
      child: CachedNetworkImage(
        imageUrl: imageUrl,
        placeholder: (context, url) => Image.asset('images/image-default.png'),
        errorWidget: (context, url, error) =>
           Image.asset('images/image-failed.png'),
      ),
    );
  }
}

使用进度加载指示

也可以使用进度加载指示器来指示加载进度,加载进度指示支持原型进度和线型进度。这种对于大图预览时会更为常用,代码如下所示,其中LinearProgressIndicator是线型指示器,CircularProgressIndicator 是圆形指示器:

Widget _imageWrapper(String imageUrl) {
    return SizedBox(
      width: 150,
      height: ITEM_HEIGHT,
      child: CachedNetworkImage(
        imageUrl: imageUrl,
        progressIndicatorBuilder: (context, url, downloadProgress) =>
            LinearProgressIndicator(value: downloadProgress.progress),
        errorWidget: (context, url, error) =>
            Image.asset('images/image-failed.png'),
      ),
    );
  }

效果

效果如下图所示,下拉刷新后,可以先看到占位图,然后逐渐过渡到加载成功的图片。如果修改链接为一个非法链接或资源不存在的链接,则会显示图片加载失败的占位图。这种体验相比空白没有任何指示的 Image.network好很多。

以上就是Flutter 使用cached_image_network优化图片加载体验的详细内容,更多关于Flutter 用cached_image_network优化图片加载的资料请关注脚本之家其它相关文章!

相关文章

  • Android RecyclerView 基础知识详解

    Android RecyclerView 基础知识详解

    本文主要介绍Android RecyclerView的资料,这里对RecyclerView 的基础知识做了详细讲解,并附简单示例代码帮助大家学习参考,有需要的小伙伴可以参考下
    2016-09-09
  • Android Studio实现进度条效果

    Android Studio实现进度条效果

    这篇文章主要为大家详细介绍了Android Studio实现进度条效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-04-04
  • 浅析Android中的visibility属性

    浅析Android中的visibility属性

    以下是对Android中的visibility属性进行了详细的分析介绍,需要的朋友可以过来参考下
    2013-08-08
  • Android编程实现对电池状态的监视功能示例

    Android编程实现对电池状态的监视功能示例

    这篇文章主要介绍了Android编程实现对电池状态的监视功能,涉及Android基于广播实现针对电源电量的判定与监视技巧,需要的朋友可以参考下
    2016-11-11
  • Android异步下载图片并且缓存图片到本地DEMO详解

    Android异步下载图片并且缓存图片到本地DEMO详解

    这篇文章主要介绍了Android异步下载图片并且缓存图片到本地DEMO详解,需要的朋友可以参考下
    2017-04-04
  • 安卓(Android)开发之自定义饼状图

    安卓(Android)开发之自定义饼状图

    饼状图制作起来其实很简单,但是制作东西最重要的不是制作结果,而是制作思路。 相信小编贴上代码大家一看就立刻明白了,下面咱们来了解一下制作思路。
    2016-08-08
  • Android编程录音工具类RecorderUtil定义与用法示例

    Android编程录音工具类RecorderUtil定义与用法示例

    这篇文章主要介绍了Android编程录音工具类RecorderUtil定义与用法,结合实例形式分析了Android录音工具类实现开始录音、停止录音、取消录音、获取录音信息等相关操作技巧,需要的朋友可以参考下
    2018-01-01
  • Android仿正点闹钟时间齿轮滑动效果

    Android仿正点闹钟时间齿轮滑动效果

    这篇文章主要为大家详细介绍了Android仿正点闹钟时间齿轮滑动效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-01-01
  • Android如何通过scheme跳转界面

    Android如何通过scheme跳转界面

    Android如何通过scheme跳转界面,这篇文章就为大家介绍了Android通过scheme跳转界面的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-07-07
  • Android中使用orc实现文字识别实例

    Android中使用orc实现文字识别实例

    这篇文章主要介绍了Android中使用orc实现文字识别实例,详细的介绍了orc的简介和用法,有兴趣的可以了解一下
    2017-05-05

最新评论