///网络图片组件(带占位图)
// ignore: must_be_immutable
class MNetWorkImageWidget extends StatelessWidget {final String imageUrl; //图片路径final double width; //宽度final double height; //高度final double radius; //圆角final BoxFit fit; //填充模式final bool isNeedPlaceholder; //是否需要占位图(默认需要)final Color placeholderBgColor; //占位图背景颜色final VoidCallback didClickCallBack; //点击事件回调Widget placeholderWidget; //占位图组件final Duration fadeOutDuration; //渐入渐出动画持续时间///属性:///key: 组件key///width: 宽度///height: 高度///radius: 圆角///fit: 图片自适应模式(默认cover)///isNeedPlaceholder: 是否需要占位图(默认需要)///placeholderBgColor: 占位图背景颜色///placeholderWidget: 占位图组件///didClickCallBack: 点击事件回调///fadeOutDuration: 渐入渐出动画持续时间GMNetWorkImageWidget({Key key,@required this.imageUrl,this.width,this.height,this.radius = 0.0,this.fit = BoxFit.cover,this.isNeedPlaceholder = true,this.placeholderBgColor = const Color(0xFFF0F0F0),this.placeholderWidget,this.didClickCallBack,this.fadeOutDuration,}) : super(key: key);@overrideWidget build(BuildContext context) {if (didClickCallBack == null) {return _buildImage();} else {return GestureDetector(child: _buildImage(),onTap: didClickCallBack,);}}Widget _buildImage() {return _buildClipRect(MCachedNetworkImage(width: width,height: height,fit: fit,imageUrl: imageUrl,placeholder: this._getCurrentPlaceholderWidget(),fadeOutDuration: this.fadeOutDuration,),);}Widget _buildClipRect(Widget child) {if (this.radius > 0) {return ClipRRect(borderRadius: BorderRadius.circular(radius),child: child,);} else {return child;}}//获取占位图组件Widget _getCurrentPlaceholderWidget() {if (this.placeholderWidget != null) {return _buildClipRect(this.placeholderWidget,);} else {if (!isNeedPlaceholder) {return _buildClipRect(Container(width: this.width,height: this.height,),);}String placeholderName = "default_29.png";if (width != null && width > 130 && width <= 180) {placeholderName = "default_44.png";} else if (width != null && width > 180) {placeholderName = "default_56.png";}String placeholderUrl = "assets/$placeholderName";return _buildClipRect(Container(width: width,height: height,color: placeholderBgColor,alignment: Alignment.center,child:Image.asset(placeholderUrl, package: "cached_network_image", fit: BoxFit.fill),),);}}
}@Deprecated('请使用 MNetWorkImageWidget 组件')
class MCachedNetworkImage extends StatelessWidget {const MCachedNetworkImage({Key key,this.imageUrl,this.fit = BoxFit.cover,this.width,this.height,this.during,this.fadeOutDuration,this.alignment,this.placeholder}): super(key: key);final String imageUrl;final BoxFit fit;final double width;final double height;final dynamic during;final Duration fadeOutDuration;final Alignment alignment;final Widget placeholder;@overrideWidget build(BuildContext context) {// return Image.network(//   imageUrl,//   width: width,//   height: height,//   alignment: alignment ??= Alignment.center,//   fit: fit ??= BoxFit.cover,// );// return CachedNetworkImage(//   imageUrl: imageUrl,//   imageBuilder: (BuildContext context, ImageProvider provider) {//     return Container(//       height: 60,//       width: 100,//       decoration: BoxDecoration(//         image: DecorationImage(//           image: provider,//           fit: BoxFit.cover,//         ),//       ),//     );//   },// );return CachedNetworkImage(imageUrl: imageUrl ?? "",fit: fit,width: width,height: height,alignment: Alignment.center,useOldImageOnUrlChange: true,fadeOutDuration: fadeOutDuration ?? Duration(milliseconds: 0),placeholder: (context, url) => placeholder,errorWidget: (context, url, error) => placeholder,// placeholder: placeholder ??= ((context, url) => CircularProgressIndicator()),);}
}/// A Calculator.
class Calculator {/// Returns [value] plus 1.int addOne(int value) => value + 1;
}

使用方法:

//左边图片。 assets/images/find_goods/xx.png为图片本地路径Widget build_left_picture(){return MNetWorkImageWidget(imageUrl: goodsModel.url,width: 100,height: 100,radius: 5,placeholderWidget: Image.asset("assets/images/find_goods/xx.png", width: 100, height: 100),
imageUrl: supplierModel.mchIconUrl ?? "",);}placeholderWidget是占位图,加载本地图片
imageUrl是加载网络图片

flutter 图片加载相关推荐

  1. Flutter图片加载数据

    结论先行: 受限于机型.Flutter版本,之后的测试结果可能不同(如Flutter团队优化了width.height,进行内存处理) cacheWidth,cacheHeight 直接resize, ...

  2. 【Flutter】Image 组件 ( 加载网络图片 | 加载静态图片 | 加载本地图片 | path_provider 插件 )

    文章目录 一.加载网络图片 二.加载静态图片 三.加载本地图片 四.完整代码示例 五.相关资源 一.加载网络图片 参考 [Flutter]Image 组件 ( Image 组件简介 | Image 构 ...

  3. Flutter Image 图片加载

    题记 -- 执剑天涯,从你的点滴积累开始,所及之处,必精益求精. 目前在西瓜视频上免费刊登 Flutter 系列教程,每日更新,欢迎关注接收提醒 [x1]微信公众号的每日提醒 随时随记 每日积累 随心 ...

  4. Flutter工具类 (二) 图片加载框架

    导入依赖 # 图片加载库cached_network_image: ^3.2.1 工具类 import 'dart:math';import 'package:cached_network_image ...

  5. Flutter开发之图片加载(九)

    移动开发少不了显示图片,今天就介绍 fluter中如何加载图片,图片加载一般分为本地加载和网络加载. 本地加载 在工程下建一个New Floder 文件夹名:images 将准备好的图片拖到 imag ...

  6. Fresco图片加载+EventBus+Butterknife+Retrofit+RxJava+RxAndroid

    使用MVP框架搭建,分包明确,V层和M层解耦,通过接口完成V层和P层以及P层和M层通信,解决内存泄漏问题 Retrofit做网络请求,封装网络请求工具类,使用单例模式,添加日志拦截器打印网络请求内容 ...

  7. 小程序一次性上传多个本地图片,上拉加载照片以及图片加载延迟解决之道

    一:小程序之一次性上传多个本地相片 最近由于项目需要所以学了下小程序,也做了一些东西,随后便有了以下的一些总结了,现在说说如何使用小程序一次性上传多个本地相片. 问题描述 最近做项目的时候要实现一个上 ...

  8. SDWebImage使用,图片加载和缓存

    本文转载至 http://blog.163.com/wzi_xiang/blog/static/659829612012111402812726/ 清除缓存: [[SDImageCache share ...

  9. Swift - 表格图片加载优化(拖动表格时不加载,停止时只加载当前页图片)

    列表的单元格中包含有图片在开发中很常见.通常我们可以直接在tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIn ...

最新文章

  1. leetcode 438. Find All Anagrams in a String 滑动窗口法
  2. 升级php_wamp怎么升级php版本
  3. Requires: libstdc++.so.6(GLIBCXX_3.4.15)
  4. spring boot + zookeeper 注册中心
  5. 三本新书(包含新系列)隆重上市
  6. AQuery学习笔记(一)
  7. 观点:我们为什么需要威胁情报?
  8. springcloud微服务实战--笔记--1、基础知识
  9. BZOJ4061/Gym100624F CERC2012 Farm and Factory 最短路、切比雪夫距离
  10. 计算机协会小游戏,网页闯关小游戏闯关记录(一)ISA TEST
  11. TensorFlow tf.keras.layers.DenseFeatures
  12. adb查看activity的堆栈信息
  13. 微型计算机控制课程设计,《微型计算机控制技术》课程设计
  14. sht21 c语言程序,湿度传感器SHT21示例代码-SampleCodeforSHT21.PDF
  15. QBASIC语言程序设计 谭浩强 pdf
  16. 程序员在囧途之风投五宗罪
  17. Local Maximum Mean Discrepancy
  18. AIX 6:新特性概述
  19. 轻度折腾nuc8i5beh
  20. 艺术摄影--光线的运用(2学时)--SDUST

热门文章

  1. 【android编程】第九讲-用户资源
  2. 安全知识云服务器ip端口网络 socket 编程 端口 大全
  3. 计算机主板扩展槽,主板上这多扩展插槽,都是干什么用的,看了不后悔
  4. 国企计算机技术岗都干什么,大家听说的国企技术岗都是什么样子的?
  5. GZH逸佳君:还在担心乱用字体会侵权吗?免费送你1800款可免费商用的精选字体
  6. 计算机x线摄影的发展趋势,计算机X线摄影技术----CR 新进展
  7. HTML5期末大作业:动物网站设计——宠物狗(10页) HTML+CSS+JavaScript 大学生静态网页设计 dw宠物网页设计 狗狗网页设计html web课程设计网页规划与设计...
  8. Ubuntu命令行安装Google浏览器
  9. 思维层次越高的人越爱看这几个公众号!
  10. Unity批量替换文字字体自制工具