代码编织梦想

小部件组件
可以在里面加装其他事件如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.delayed
    Future.delayed(Duration(seconds: 2)).then((_) {
      _incrementCounter();

      ///(context as Element).markNeedsBuild();
      //ixx++;

      //setState(() {});
      // 加载完成后关闭弹窗
      // Navigator.pop(context);
    });

    // 模拟加载过程,这里使用Future.delayed
    Future.delayed(Duration(seconds: 4)).then((_) {
      _incrementCounter();
    });

    // 模拟加载过程,这里使用Future.delayed
    Future.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'),
            ),



版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/ZQ200720/article/details/137143582

android完整详细阿里腾讯面试题含答案(一)_普通网友的博客-爱代码爱编程_android sdk面试

1、四大组件是什么? Activity【活动】:用于表现功能。 Service【服务】:后台运行服务,不提供界面呈现。 BroadcastReceiver【广播接收器】:用来接收广播。 Content Provider【内

2020 android面试题答案-爱代码爱编程

(1)java面试题(基础+进阶)(必须) java中==和equals和hashCode的区别 ==是运算符,用来比较两个值、两个对象的内存地址是否相等; equals是Object类的方法,默认情况下比较两个对象是否是同一个对象,内部实现是通过“==”来实现的。 如果想比较两个对象的其他内容,则可以通过重写equals方法, hashCoed也是Obj

跨平台Web Canvas渲染引擎架构的设计与思考(内含实现方案)-爱代码爱编程

这篇文章主要从技术视角介绍下跨平台WebCanvas的架构设计以及一些关键模块的实现方案(以Android为主),限于作者水平,有不准确的地方欢迎指正或者讨论。 设计目标 标准化:Web Canvas标准主要指的是W3C的Canvas2D和WebGL。标准化的好处一方面是学习成本低,另一方面上层的游戏引擎也可以以很低的适配成本得到复用; 跨

ios启动页与flutter启动页无缝衔接,无闪烁和黑屏解决-爱代码爱编程

1、首先需要配置原生的 LaunchScreen 如下图: 注意:LaunchScreen中View的SafeArea 一定要有。如果这里没有SafeArea就会出现flutter渲染第一帧和native衔接时出现闪烁的现象。splash.png也尽量放在根目录中,不要放在Assets中。 2、flutter启动页配置 flutter 中可以考虑

flutter 弹窗系列easyloading-爱代码爱编程

showDialog 实现 实现弹窗的方式showDialog,部分源码如下: Future<T> showDialog<T>({ @required BuildContext context, bool barrierDismissible = true, @Deprecated( 'Instead of

flutter 状态管理之 inheritedwidget 使用和分析-爱代码爱编程

InheritedWidget 使用 初识 Flutter 的 Demo 是一个点击按键然后数字增加的小应用,这小应用就涉及到了 Flutter 中的状态管理,核心就是 setState 方法。 setState 方法用

flutter页面生命周期-爱代码爱编程

基于StatefulWidget衍生出渲染页面层 基于StatelessWidget衍生出渲染普通(嵌入式小组件)层 StatelessWidget组件周期函数 : createElement/build函数 //Sta

flutter环境搭建及版本管理-爱代码爱编程

前言 Flutter已成为移动应用开发的主流选择,其跨平台优势日益凸显,使学习Flutter成为现代开发者的必备技能。越来越多的公司和团队选择Flutter构建应用,这为开发者提供了更广阔的就业机会和职业发展空间。Flut