文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2024-04-02 19:55

关注

在 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优化图片加载的资料请关注编程网其它相关文章!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-移动开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯