ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Flutter实现mm:ss(分秒)倒计时组件

2021-09-23 17:34:27  阅读:344  来源: 互联网

标签:分秒 textColor return ss widget textSize mm int null



import 'dart:async'; import 'dart:developer'; import 'package:flutter/cupertino.dart'; //分:秒倒计时器 class CountDownWidget extends StatefulWidget {
//最终时间数据格式为 时间戳的字符串 final String validTime;
//字体大小 final double? textSize;
//字体颜色 final Color? textColor;
//是否倒计时结束 final ValueChanged<bool>? isFinish; //CountDownWidget(this.validTime, {this.textSize}); const CountDownWidget(this.validTime, {Key? key, this.textSize, this.textColor, this.isFinish}) : super(key: key); @override State<StatefulWidget> createState() { return _CountDownWidgetState(); } } class _CountDownWidgetState extends State<CountDownWidget> { @override Widget build(BuildContext context) { // log("_timerString 240000"); if (widget.validTime.isEmpty) { return Container(); } int endTime = int.parse(widget.validTime); //数字格式化,将 0~9 的时间转换为 00~09 DateTime now = DateTime.now(); //把后台返回的结束时间换为DateTime类型 DateTime endTimeDate = DateTime.fromMillisecondsSinceEpoch(endTime); //和当前时间相减 Duration difference = endTimeDate.difference(now); //获取运算完成的时间 int computingTime = difference.inSeconds; String computingTimeDate = constructFirstTime(computingTime); var txtArray = computingTimeDate.split(","); late String textContext = constructTime(computingTime); if (computingTime < 0) { textContext = "计时结束"; if (widget.isFinish != null) { widget.isFinish!(true); } return Text( '计时结束', style: TextStyle( fontSize: widget.textSize != null ? widget.textSize : 12.0, color: widget.textColor != null ? widget.textColor : CupertinoDynamicColor.resolve( CupertinoColors.systemRed, context)), ); } else { if (int.parse(txtArray[0]) > 0) { return Text( '59:59', style: TextStyle( fontSize: widget.textSize != null ? widget.textSize : 12.0, color: widget.textColor != null ? widget.textColor : CupertinoDynamicColor.resolve( CupertinoColors.systemRed, context)), ); } else { if (computingTime > 0) { Timer.periodic(Duration(seconds: 1), (timer) { if (computingTime > 0) { String computingTimeDate = constructTime(computingTime); textContext = computingTimeDate; setState(() {}); timer.cancel(); } else { timer.cancel(); textContext = '计时结束'; if (widget.isFinish != null) { widget.isFinish!(true); } setState(() {}); } }); } else { if (widget.isFinish != null) { widget.isFinish!(true); } return Text( '计时结束', style: TextStyle( fontSize: widget.textSize != null ? widget.textSize : 12.0, color: widget.textColor != null ? widget.textColor : CupertinoDynamicColor.resolve( CupertinoColors.systemRed, context)), ); } } return Text( textContext, style: TextStyle( fontSize: widget.textSize != null ? widget.textSize : 12.0, color: widget.textColor != null ? widget.textColor : CupertinoDynamicColor.resolve( CupertinoColors.systemRed, context)), ); } } String formatTime(int timeNum) { return timeNum < 10 ? "0" + timeNum.toString() : timeNum.toString(); } String constructFirstTime(int seconds) { int hour = seconds ~/ 3600; int minute = seconds % 3600 ~/ 60; int second = seconds % 60; return formatTime(hour) + "," + formatTime(minute) + ":" + formatTime(second); } String constructTime(int seconds) { int minute = seconds % 3600 ~/ 60; int second = seconds % 60; return formatTime(minute) + ":" + formatTime(second); } }

 

调用方式:

                 CountDownWidget(
                          "1632384385823",
                          textSize: 14,
                          textColor: Colors.white,
                          isFinish: (e) {
                            if (e) {
                              //计时结束
                            }
                          },
                        )

 

 

标签:分秒,textColor,return,ss,widget,textSize,mm,int,null
来源: https://www.cnblogs.com/niupi/p/15325170.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有