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.mzph.cn/news/781695.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

暴力枚举--选数

题目描述 已知 n 个整数 x1​,x2​,⋯,xn​&#xff0c;以及 1 个整数 k&#xff08;k<n&#xff09;。从 n 个整数中任选 k 个整数相加&#xff0c;可分别得到一系列的和。例如当 n4&#xff0c;k3&#xff0c;4 个整数分别为 3,7,12,19 时&#xff0c;可得全部的组合与它…

关于Docker守护程序未运行导致的错误

01 在启动Docker之前&#xff0c;确保你已经安装了Docker并且Docker服务是运行的。以下是一些步骤可以帮助你解决这个问题&#xff1a; 首先&#xff0c;确保Docker已经正确安装在你的系统上。你可以通过运行以下命令来检查Docker是否已安装&#xff1a; docker --version如果…

【免费获取】【下片神器】IDM非主流网站视频免费下载神器IDM+m3u8并解决idm下载失败问题 idm下载器超长免费试用

当你浏览一个网站&#xff0c;看到一个喜欢的视频&#xff0c;不知道如何下载的时候&#xff0c;本教程或许可以帮你点小忙。大部分的主流网站都有专门的下载工具&#xff0c;本篇教程主要针对的是一些非主流的小网站。 我们的下载方法就是利用IDM&#xff08;Internet Downlo…

web练习仿小米页面

效果图&#xff1a; HTML代码&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document…

江苏开放大学2024年春《液压与气压传动060246》第2形考作业占形考成绩的25%参考答案

​答案&#xff1a;更多答案&#xff0c;请关注【电大搜题】微信公众号 答案&#xff1a;更多答案&#xff0c;请关注【电大搜题】微信公众号 答案&#xff1a;更多答案&#xff0c;请关注【电大搜题】微信公众号 电大搜题 多的用不完的题库&#xff0c;支持文字、图片搜题&…

python--冒泡排序和main函数

1.判断是不是回文数&#xff1a; x int(input("请输入一个正整数&#xff1a;")) x str(x) if x x[::-1]:print("是回文数。") else:print("不是回文数。") 2.冒泡排序 # 冒泡排序: # [30&#xff0c;8&#xff0c;-10&#xff0c; 50&am…

[OAuth2]authorization_request_not_found

最近在写一套OAuth2s授权认证&#xff0c;当在oauth2-client调用oauth2-server&#xff0c;并且在点击授权以后&#xff0c;oauth2-client却显示【authorization_request_not_found】&#xff0c;并跳到了登陆页面。 经过调试发现&#xff0c;【authorization_request_not_fou…

Java希尔排序知识点(含面试大厂题和源码)

希尔排序&#xff08;Shell Sort&#xff09;是插入排序的一种改进版本&#xff0c;也被称为“缩小增量排序”。它是由IBM的研究员Donald Shell于1959年提出的。希尔排序的核心思想是将原始数据集分割成若干个子序列&#xff0c;每个子序列由相隔一定增量的元素组成&#xff0c…

[LeetCode][400]第 N 位数字

题目 400. 第 N 位数字 给你一个整数 n &#xff0c;请你在无限的整数序列 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, …] 中找出并返回第 n 位上的数字。 示例 1&#xff1a; 输入&#xff1a;n 3 输出&#xff1a;3 示例 2&#xff1a; 输入&#xff1a;n 11 输出&#xff1a;…

java算法汇总(蓝桥常用-->自总版)(更新中...)

这里写目录标题 1.递归求n的阶乘2.互质3.例题:奇妙的数字两个数字拼接String.toCharArray()方法String.valueOf()方法 4.例题:美丽的2String.contains()方法 5.ASCII码---a,A,0的转换6.String[] a---->求sum(a[p].charAt(q))-0;7.复数BigInteger 大整数类型本题用到的方法--…

Sora是否能颠覆视频制作行业?一文带你了解

一个月前OpenAI宣布了一款名为Sora的新生成式人工智能系统&#xff0c;该系统可以根据文本提示生成短视频。虽然Sora尚未向公众开放&#xff0c;但迄今为止发布的高质量样本已经引起了兴奋和担忧的反应。 OpenAI发布的样本视频&#xff08;该公司称这些视频是由Sora直接制作&am…

Python学习笔记-简单案例实现多进程与多线程

Python 的多进程与多线程是并发编程的两种重要方式&#xff0c;用于提高程序的执行效率。它们各自有不同的特点和适用场景。 多进程&#xff08;Multiprocessing&#xff09; 概念&#xff1a; 多进程是指操作系统中同时运行多个程序实例&#xff0c;每个实例称为一个进程。…

表单元素使用

表单元素使用 要完成的效果:代码实现: 要完成的效果: 代码实现: <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0">…

完整部署一套k8s-v.1.28.0版本的集群

一、系统情况 虚拟机版本&#xff1a;esxi 6.7 系统版本&#xff1a;centos7.9_2009_x86 配置&#xff1a;4核8G&#xff08;官网最低要求2核2G&#xff09; 192.168.0.137 master节点 192.168.0.139 node2节点 192.168.0.138 node1节点&#xff08;节点扩容练习&#xf…

Spring Cloud_Spring Cloud Alibaba_00000

版本选择 Spring Boot版本选择 Spring Boot github源码地址&#xff1a;https://github.com/spring-projects/spring-boot/releases/ Spring Boot github地址&#xff1a;https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-3.0-Release-Notes Spring Cloud g…

DataX 源码改造支持Mysql 8.X

文章目录 DataX 源码改造支持Mysql 8.X问题背景克隆源代码并修改重新打包生产环境发布DataX 源码改造支持Mysql 8.X 问题背景 今天在使用DataX同步数据的时候遇到一个问题,报错如下 错误信息为:java.sql.SQLException: No suitable driver found for ["jdbc:mysql://…

Java-常见面试题收集(七)

十四 MySQL 1 MySQL 支持的存储引擎 MySQL 支持多种存储引擎&#xff0c;常见的有2种&#xff0c;你可以通过 show engines 命令来查看 MySQL 支持的所有存储引擎。MySQL 当前默认的存储引擎是 InnoDB。并且&#xff0c;所有的存储引擎中只有 InnoDB 是事务性存储引擎&#xf…

==和equals的区别【大白话Java面试题】

和equals的区别 大白话回答 的作用&#xff1a;   基本类型&#xff1a;比较的就是值是否相同   引用类型&#xff1a;比较的就是地址值是否相同 equals 的作用:   引用类型&#xff1a;默认情况下&#xff0c;比较的是地址值。 注&#xff1a;不过&#xff0c;我们可以…

在axios中设置方法防止http重复请求

可以在封装的 Axios 中设置方法来防止 HTTP 的重复请求。一种常见的方法是通过设置一个标识符&#xff0c;在发送请求前检查该标识符&#xff0c;如果之前已经有相同的请求正在进行&#xff0c;则取消当前请求或者等待上一个请求完成后再发送新请求。这种方式可以有效地避免重复…

CCF考级 1-8级考纲知识点

CCF考级 C 一级考纲知识内容计算机基础知识集成开发环境结构化程序设计程序的基本语句程序的基本概念基本运算基本数据类型 C 二级考纲知识内容计算机存储与网络程序设计语言流程图ASCII 编码数据类型转换多层分支/循环结构数学函数 C 三级考纲知识内容数据编码进制转换位运算算…