IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Flutter优化加载网络图片及异常捕获 -> 正文阅读

[移动开发]Flutter优化加载网络图片及异常捕获

一、前言

加载网络图片时,有时候因为一些原因导致加载缓慢。所以可以选择如下方式添加占位图。

二、使用

1. 图片占位符

(1) FadeInImage

FadeInImage(
  width: 100,
  fit: BoxFit.cover,
  placeholder: NetworkImage("占位图网址"),
  image: NetworkImage("实际渲染图片网址")
)

(2) 带圆角的FadeInImage

ClipRRect(
  borderRadius: BorderRadius.circular(200.dp),
  child: FadeInImage(
    placeholder: NetworkImage("占位图网址"),
    image: NetworkImage("实际渲染图片网址")
)

2. Widget占位符

(1) Image.frameBuilder属性

四个参数如下:

  • context:构建上下文
  • child:widget子元素
  • frame:如果图片还在加载中的话为null
  • wasSynchronousLoaded:布尔值,图片加载完成后为true
Image.network(
  "实际渲染图片网址",
  errorBuilder: (context, error, stackTrace) {
    return CircularProgressIndicator();
  },
  frameBuilder: (context, child, frame, wasSynchronousLoaded){
    if(wasSynchronousLoaded){
      return child;
    }
    return AnimatedOpacity( /// 淡出效果
      child: child,
      opacity: frame == null ? 0 : 1,
      duration: const Duration(seconds: 2),
      curve: Curves.easeOut,
    );
  }
)

(2) Image.loadingBuilder属性

四个参数如下:

  • context:构建上下文
  • child:widget子元素
  • loadingProgress:加载进度,里面包含加载信息
    • loadingProgress.cumulativeBytesLoaded:已经传输的字节
    • loadingProgress.expectedTotalBytes:总字节
Image.network(
  "实际渲染图片网址",
  errorBuilder: (context, error, stackTrace) {
    return CircularProgressIndicator();
  },
  loadingBuilder: (context, child, loadingProgress){
    if(loadingProgress == null){
      return child;
    }
    return Container(
      alignment: Alignment.center,
      child: CircularProgressIndicator(
        value: loadingProgress.expectedTotalBytes != null
        ? loadingProgress.cumulativeBytesLoaded /
        loadingProgress.expectedTotalBytes!
        : null,
      ),
    );
  }
)

进度条

CircularProgressIndicator如下参数:

  • value:进度值, 进度值在0到1.0之间。 如果为空显示动画,非空显示进度
  • backgroundColor:背景颜色
  • valueColor:进度值颜色
  • strokeWidth:进度值宽度,默认4.0
  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-12-26 22:18:57  更:2021-12-26 22:20:28 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 10:01:40-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码