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

flutter 自定义弹窗封装弹窗----在弹窗内实现部分窗体生命周期

小部件组件
可以在里面加装其他事件如HTTP接口访问

import 'package:flutter/material.dart';///执行弹窗动画封装
class ExecutionDialog extends StatefulWidget {// final String? title;// final String? message;// final Function? onExecute;//// const ExecutionDialog({super.key, this.title, this.message, this.onExecute});const ExecutionDialog({super.key,});_ExecutionDialogState createState() => _ExecutionDialogState();
}//封装执行动画 完整的自我生命周期
class _ExecutionDialogState extends State<ExecutionDialog> {///固定预制参数Map<int, Widget> stateToWidgetMap = {0: Container(width: 65.0, // 设置容器的宽度height: 65.0, // 设置容器的高度child: const CircularProgressIndicator(strokeWidth: 5.0, // 设置进度圈的线宽valueColor: AlwaysStoppedAnimation<Color>(Colors.blue),),),1: const Image(image: AssetImage('assets/ic_timeout.png'),width: 65,),2: const Image(image: AssetImage('assets/ic_sucess.png'),width: 65,),3: const Image(image: AssetImage('assets/ic_failed.png'),width: 65,),// 添加更多状态和对应的Widget};var strlist = ["执行中..", "执行超时", "指令成功", "执行错误"];List<Color> listcolor=[Colors.blue,Colors.yellow[700]!,Colors.blue,Colors.red[700]!];///bool _isExecuting = false;int ixx = 0;void _incrementCounter() {// setState(() {//// });ixx++;if (ixx == strlist.length) {ixx = 0;}// else if (ixx == 2) {//   Future.delayed(Duration(milliseconds: 500)).then((_) {//     _incrementCounter();//     Navigator.pop(context);//   });// }setState(() {});}void _incrementCounter2() {// 模拟加载过程,这里使用Future.delayedFuture.delayed(Duration(seconds: 2)).then((_) {_incrementCounter();///(context as Element).markNeedsBuild();//ixx++;//setState(() {});// 加载完成后关闭弹窗// Navigator.pop(context);});// 模拟加载过程,这里使用Future.delayedFuture.delayed(Duration(seconds: 4)).then((_) {_incrementCounter();});// 模拟加载过程,这里使用Future.delayedFuture.delayed(Duration(seconds: 6)).then((_) {_incrementCounter();});Future.delayed(Duration(seconds: 8)).then((_) {_incrementCounter();});Future.delayed(Duration(seconds: 11)).then((_) {_incrementCounter();Navigator.pop(context);});}void initState() {super.initState();///模拟定时器_incrementCounter2();}Widget build(BuildContext context) {return AlertDialog(content: SizedBox(height: 160,child: Column(crossAxisAlignment: CrossAxisAlignment.center, // 水平居中mainAxisAlignment: MainAxisAlignment.center, // 垂直居中children: [/* const Text('提示',style: TextStyle(fontSize: 16,color: Colors.black,),),///分割线条Container(height: 2, // 线条的高度color: Colors.black, // 线条的颜色width: double.infinity, // 线条的宽度,尽可能宽margin:EdgeInsets.symmetric(horizontal: 40, vertical: 20), // 左右边距),*/stateToWidgetMap[ixx] ?? const Text('未知状态'),// CircularProgressIndicator(),],),),actions: <Widget>[Row(mainAxisAlignment: MainAxisAlignment.center,children: [Text(strlist[ixx],style: TextStyle(fontSize: 16,color: listcolor[ixx] ?? Colors.black,//fontWeight: FontWeight.bold,),),],)],);}void dispose() {stateToWidgetMap.clear();strlist.clear();listcolor.clear();///回收界面super.dispose();}
}

使用 ----以弹窗形式

  void _showDialog2() {showDialog(context: context,//点击背景不消失barrierDismissible: false,builder: (BuildContext context) {// 使用StatefulBuilder来局部管理Dialog中的状态return const ExecutionDialog();},);}///点击触发弹窗
ElevatedButton(onPressed: _showDialog2,child: Text('Show Dialog'),),
http://www.lryc.cn/news/328339.html

相关文章:

  • go语言 私用仓库包下载
  • Math类
  • Git 入门教程
  • Linux网络配置(超详细)
  • [自研开源] 数据集成之分批传输 v0.7
  • 用 AI 编程-释放ChatGPT的力量
  • 【快速解决】解决谷歌自动更新的问题,禁止谷歌自动更新,如何防止chrome自动升级 chrome浏览器禁止自动升级设置方法
  • 【Leetcode每日一题】模拟 - 替换所有的问号(难度⭐)(42)
  • 再见 mysql_upgrade
  • .NET Core教程:入门与实践实例
  • docker环境配置过程中的常见问题
  • 精选2024年最佳项目管理系统!实用推荐与详细评测
  • 民航电子数据库:CAEMigrator迁移数据库时总是卡死
  • 数据结构 第6章 图(一轮习题总结)
  • 如何在智能交通系统中使用物联网技术提高道路安全和效率
  • 七大 QC 工具图的定义与示例(看这篇就够了)
  • 【JavaScript算法】DOM树层级显示
  • MySql实战--全局锁和表锁 :给表加个字段怎么有这么多阻碍
  • axios请求类型是文件流怎么显示报错信息
  • DataX 源码改造支持Mysql 8.X
  • 大数据学习-2024/3/29-oracle使用介绍
  • Vim - 文本编辑器 Vi vs Vim
  • SpringBoot 登录认证(二)
  • C#语言规范及特殊用法笔记
  • Mysql数据库:日志管理、备份与恢复
  • kubernetes(K8S)学习(八):K8S之常见部署方案
  • 《AIGC重塑金融:AI大模型驱动的金融变革与实践》
  • 【详解】运算放大器工作原理及其在信号处理中的核心作用
  • 银河麒麟V10:sudo: /usr/bin/sudo 必须属于用户 ID 0(的用户)并且设置 setuid 位
  • Android 多层级列表实现