当前位置: 首页 > wzjs >正文

广州做网站的公司seo外包服务

广州做网站的公司,seo外包服务,学历提升官网报名咨询,影院网站建设在flutter开发中,当App项目内存吃紧时,页面中如果图片很多时需要及时清理,如果不能及时清理,会造成内存泄漏,导致App卡顿甚至强制退出或手机死机。 这里我使用extended_image封装了一个全局可用的Widget,亲…

在flutter开发中,当App项目内存吃紧时,页面中如果图片很多时需要及时清理,如果不能及时清理,会造成内存泄漏,导致App卡顿甚至强制退出或手机死机。

这里我使用extended_image封装了一个全局可用的Widget,亲测IOS和安卓好用。

首先在pubspec.yaml文件中配置插件并下载,执行Pub get。
 

dependencies:extended_image: ^6.2.0

我使用的是6.2.0版本,基于ExtendedImage我对netWork网络图片组件做了如下封装,内有注释与备注,就不做过多的解释了,完全都能看的懂!

class JudgeNetworkImage extends StatefulWidget {const JudgeNetworkImage(this.url, {Key? key,this.width,this.height,this.isAvatar = false,this.fit = BoxFit.cover,this.borderRadius,this.shape,this.borderWidth = 0.0,this.borderColor,this.opacity = 1.0,this.scale = 1.0,this.maxBytes,this.filterQuality = FilterQuality.low,this.repeat = ImageRepeat.noRepeat,this.replaceImgPlayback = false,this.enableMemoryCache = true,this.clearMemoryCacheIfFailed = true,this.clearMemoryCacheWhenDispose = true,this.cacheRawData = false,this.placeholder,this.errorWidget,this.loadingWidget,this.defaultImagePath,}) : super(key: key);final String url; // 图片URLfinal double? width; // 宽度final double? height; // 高度final bool isAvatar; // 是否为头像final BoxFit fit; // 适配方式final BorderRadius? borderRadius; // 圆角final BoxShape? shape; // 形状(圆形/矩形)final double borderWidth; // 边框宽度final Color? borderColor; // 边框颜色final double opacity; // 透明度final double scale; // 缩放比例final int? maxBytes; // 控制图片加载时的字节大小限制final FilterQuality filterQuality; // 缩放质量final ImageRepeat repeat; // 重复方式final bool replaceImgPlayback; // 更换图片时是否保留旧图final bool enableMemoryCache; // 启用内存缓存final bool clearMemoryCacheIfFailed; // 加载失败时清除缓存final bool clearMemoryCacheWhenDispose; // 组件销毁时清除缓存final bool cacheRawData; // 缓存原始数据final Widget? placeholder; // 加载中占位图final Widget? errorWidget; // 加载失败组件final Widget? loadingWidget; // 加载中组件final String? defaultImagePath; // 默认图片路径@overrideState<JudgeNetworkImage> createState() => _JudgeNetworkImageState();
}class _JudgeNetworkImageState extends State<JudgeNetworkImage> {late String _url;@overridevoid initState() {super.initState();_url = widget.url;}@overridevoid dispose() {super.dispose();if (widget.clearMemoryCacheWhenDispose) {// 主动清除图片缓存if (_url.isNotEmpty && _url != (widget.defaultImagePath ?? '')) {final provider = ExtendedNetworkImageProvider(_url);provider.evict();}}}@overrideWidget build(BuildContext context) {Widget child = Container(width: widget.width ?? double.maxFinite,height: widget.height ?? double.maxFinite,decoration: BoxDecoration(// 边框部分border: widget.borderWidth > 0? Border.all(color: widget.borderColor ?? Colors.transparent,width: widget.borderWidth,): null,),child: ExtendedImage.network(_url,width: widget.width,height: widget.height,fit: widget.fit,scale: widget.scale,filterQuality: widget.filterQuality,repeat: widget.repeat,gaplessPlayback: widget.replaceImgPlayback,enableMemoryCache: widget.enableMemoryCache,clearMemoryCacheIfFailed: widget.clearMemoryCacheIfFailed,clearMemoryCacheWhenDispose: widget.clearMemoryCacheWhenDispose,cacheRawData: widget.cacheRawData,maxBytes: widget.maxBytes,// 应用透时度color: widget.opacity < 1.0? Colors.white.withOpacity(widget.opacity): null,colorBlendMode: widget.opacity < 1.0 ? BlendMode.srcIn : null,clipBehavior: Clip.none,// 加载状态回调loadStateChanged: (state) {return _handleLoadState(state);},),);if (widget.shape == BoxShape.circle) {return ClipOval(child: child,);} else if (widget.borderRadius != null) {return ClipRRect(borderRadius: widget.borderRadius,child: child,);} else {return child;}}/// 处理加载状态Widget _handleLoadState(ExtendedImageState state) {switch (state.extendedImageLoadState) {case LoadState.loading:// 加载中显示指示器return SizedBox(width: widget.width != null ? widget.width! * 0.4 : 42.rpx,child: Center(child: CircularProgressIndicator(valueColor:const AlwaysStoppedAnimation<Color>(AppColors.success),strokeWidth: 4.rpx,),),);case LoadState.completed:return state.completedWidget;case LoadState.failed:// 加载失败 - 显示默认图片并清除缓存_clearCacheOnError(state);return Container(color: const Color(0xFFF2F2F2),alignment: Alignment.center,child: widget.isAvatar? Image.asset('${AppGlobal.imgUrl}man_presuppose.png',fit: BoxFit.fill,): Image.asset('${AppGlobal.imgUrl}not_pic.png',width: widget.width != null ? widget.width! * 0.6 : 64.rpx,fit: BoxFit.fitWidth,),);}}void _clearCacheOnError(ExtendedImageState state) {if (widget.clearMemoryCacheIfFailed && mounted) {// 获取图片提供者并清除缓存if (state.imageProvider is ExtendedNetworkImageProvider) {final provider = state.imageProvider as ExtendedNetworkImageProvider;provider.evict();}}}
}

以上就是一个完整的网络图片widget的封装,对性能提升有相当大的帮助!

http://www.dtcms.com/wzjs/376834.html

相关文章:

  • 吃的网站要怎么做的seo发包技术教程
  • 常见的网页布局有几种方式网站优化外包
  • 石湾手机网站建设江门网站建设
  • 沧州网站建设王宝祥怎么请专业拓客团队
  • 网站制作 沈阳百度指数有三个功能模块
  • 雄安新区做网站公司个人网页制作成品欣赏
  • 有哪些外国网站国内可以登录的谷歌seo和百度seo
  • 网站安全建设步骤腾讯企点qq
  • 坑梓做网站公司怎么样seo的优化原理
  • 网站建设与熊掌号未来的关系seo站内优化包括
  • 专做药材的网站有哪些宣传软文案例
  • 开发的网站百度一下知道官网
  • 网站上线前准备上海网站关键词排名
  • 公众平台网页版登录seo科技网
  • 网站怎么做结算网络建站公司
  • 大连网站制作美工网页设计制作网站素材
  • 为什么要建设政府网站如何推广微信公众号
  • 两学一做网站链接凡科建站登录官网
  • 网站加载百度地图青岛百度代理公司
  • 中山做网站的公司哪家好太原seo排名优化软件
  • 工作图片seo外包品牌
  • 珠海品牌网站建设杭州排名优化公司
  • 在新西兰做兼职的网站今日新闻内容
  • 科创纵横 网站建设seo网络推广经理
  • 简述建设网站的基本流程网络营销与传统营销有哪些区别
  • 城市建设网站调查问卷谷歌搜索引擎下载安装
  • 中国建设银行下载官方网站手机网站建设案例
  • wordpress 题库seo群发软件
  • 学院网站改造方案搜狗搜索引擎入口
  • 公司建设网站的申请报告福州关键词优化平台