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

loading加载中组件封装

loading封装

import 'package:flutter/material.dart';class LoadingShop {// 当前 loading 是否正在显示,防止用户连续点击时重复弹出多个 Dialog。bool _isShowing = false;// 显示 loading。//// ctx:页面的 BuildContext,用来找到当前页面所在的 Navigator。// text:loading 下方的提示文字,不传时默认显示“加载中...”void show(BuildContext ctx, {String text = '加载中...'}) {if (_isShowing) return;if (!ctx.mounted) return;_isShowing = true;showDialog<void>(// context:Dialog 要挂载到哪个页面上。context: ctx,// barrierDismissible:是否允许点击半透明遮罩关闭 Dialog。// loading 一般不允许用户手动点掉,所以这里设置为 false。barrierDismissible: false,// useRootNavigator:使用根 Navigator 弹出 Dialog。// 页面里如果有嵌套 Navigator,用 true 更容易保证 hide 时能关到这个全局 loading。useRootNavigator: true,// builder:真正返回 Dialog 内容的地方。builder: (dialogCtx) {return Dialog(// backgroundColor:Dialog 自己的背景色。backgroundColor: Colors.black87,// elevation:阴影高度,数值越大,看起来越“浮起来”。elevation: 8,// shadowColor:阴影颜色。shadowColor: Colors.black54,// surfaceTintColor:Material 3 里给表面叠加的颜色。// 这里设为透明,避免黑色 Dialog 被系统额外染色。surfaceTintColor: Colors.transparent,// insetPadding:Dialog 距离屏幕边缘的最小距离。insetPadding: const EdgeInsets.symmetric(horizontal: 40),// shape:Dialog 的外形,这里设置圆角。shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(12),),// child:Dialog 里面真正显示的内容。child: Padding(padding: const EdgeInsets.symmetric(horizontal: 28, vertical: 24),child: Column(// mainAxisSize.min:内容有多高,Dialog 就占多高,不撑满屏幕。mainAxisSize: MainAxisSize.min,children: [const SizedBox(width: 32,height: 32,child: CircularProgressIndicator(strokeWidth: 3,color: Colors.white,),),const SizedBox(height: 14),Text(text,style: const TextStyle(color: Colors.white,fontSize: 15,fontWeight: FontWeight.w500,),),],),),);},).whenComplete(() {_isShowing = false;});}// 隐藏 loading。//// rootNavigator: true 要和 show 里的 useRootNavigator: true 对应,// 这样才能关闭同一个 Navigator 上弹出来的 Dialog。void hide(BuildContext ctx) {if (!_isShowing) return;if (!ctx.mounted) return;Navigator.of(ctx, rootNavigator: true).pop();_isShowing = false;}
}// 全局 loading 实例。
//
// 使用方式:
// loadingnew.show(context);
// loadingnew.hide(context);
final LoadingShop loadingnew = LoadingShop();
http://www.jsqmd.com/news/752146/

相关文章:

  • 无锡苏康虫害防治科技:无锡灭跳蚤靠谱企业推荐 - LYL仔仔
  • TQVaultAE终极指南:如何为《泰坦之旅》打造无限仓库和智能装备管理系统
  • 虚幻引擎多玩家开发终极指南:AdvancedSessionsPlugin完整教程
  • 武汉擎天仕劳务:武汉设备吊装哪个公司好 - LYL仔仔
  • Ubuntu Server 启动过程中,比较慢
  • 惠州市惠城区兴旺搬迁:惠州居家搬迁好用的公司 - LYL仔仔
  • 别再硬编码了!用DLL实现XCP SeedKey,让你的算法更新和密钥管理更灵活
  • 福建 SCMP 证书报考及含金量解读 - 众智商学院课程中心
  • 告别卡顿:用SVFI的AI视频补帧技术让每一帧都流畅丝滑
  • 玲珑GUI-软件安装 - EM
  • 别再只写stats.ttest_ind了!用Python做独立样本T检验前,先搞定这个关键步骤
  • 基于Cursor的本地化会议纪要生成工具:静态Web应用与AI规则集成实践
  • 扬州市鑫之雨防水科技:扬州厂房漏水卫生间漏水维修推荐哪几家 - LYL仔仔
  • 杭州市拱墅区悦夏废品:杭州仓库剩余废料清理供应商 - LYL仔仔
  • 上海鸿沄高空作业:上海工厂防水保温施工哪家专业 - LYL仔仔
  • 3步快速解锁加密音乐:Unlock Music浏览器端音频解密终极指南
  • NHSE终极指南:如何通过动物森友会存档编辑工具释放你的岛屿创意
  • 广州市增城添伟建材:广州围挡出售公司哪家实力强 - LYL仔仔
  • 青岛兴盛伟业包装:城阳区软硬包背景墙加工定制公司 - LYL仔仔
  • TV Bro电视浏览器:让您的智能电视成为真正的上网利器
  • 玲珑GUI-逻辑控制 - EM
  • 玲珑GUI-介绍 - EM
  • 广西 SCMP 证书报考及含金量解读 - 众智商学院课程中心
  • 玲珑GUI-显示图片 - EM
  • Docker运行OpenWRT - EM
  • 目标检测模型训练时,为什么我建议你从IOU Loss换成CIOU Loss?一个YOLOv5实验对比告诉你答案
  • 从抽卡保底到地图生成:用Godot4.2的GDScript设计游戏中的随机系统
  • 别再手动切字符串了!C语言sscanf函数实战:从日志解析到配置读取的5个真实案例
  • 炉石传说macOS智能助手HSTracker:让每一局对战都拥有数据分析师
  • 湖北 SCMP 证书报考及含金量解读 - 众智商学院课程中心