Flutter 倒计时实现
Flutter 倒计时实现
1.此组建用时间戳计算倒计时
import 'dart:async';
import 'package:flutter/material.dart';import 'dart:ui';class itemOrderWidget extends StatefulWidget {final int order;final String type;final childrenCallBack;itemOrderWidget({Key key,this.order,this.type,this.childrenCallBack,}) : super(key: key);@override_itemOrderWidgetState createState() => _itemOrderWidgetState(timerControl: order);
}class _itemOrderWidgetState extends State<itemOrderWidget> {_itemOrderWidgetState({this.timerControl});int timerControl;String remainTime = '--:--';// 显示相应的剩余时间Timer _timer;@overridevoid initState() {super.initState();// 初始化的时候开启倒计时start(timerControl);}@overrideWidget build(BuildContext context) {// TODO: implement buildreturn new Text(remainTime,style: TextStyle(fontSize: 22.0, color: Color(0xffAA1F52), fontFamily: 'Akrobat-Bold'),);}void caculateTime(nowTime, endTime) {var _surplus = endTime.difference(nowTime);int day = (_surplus.inSeconds ~/ 3600) ~/ 24;int hour = (_surplus.inSeconds ~/ 3600) % 24;int minute = _surplus.inSeconds % 3600 ~/ 60;// 如果用到秒的话计算int second = _surplus.inSeconds % 60;String minStat = "0"; //统计总分钟String secondString = "0"; //秒String str = ""; //统计minStat = (day*24*60 + hour*60 + minute).toString(); //换算成分if(int.parse(minStat) < 10){minStat = "0" + minStat.toString();}secondString = second < 10 ? "0" + second.toString() :second.toString();str =minStat+":"+secondString;setState(() {remainTime = str;});}void startCountDown(time){var nowTime = DateTime.now();var endTime = DateTime.parse(time.toString());// 重新计时的时候要把之前的清除掉if (_timer != null) {if (_timer.isActive) {_timer.cancel();_timer = null;}}const repeatPeriod = const Duration(seconds: 1);caculateTime(nowTime, endTime);_timer = new Timer.periodic(repeatPeriod, (timer) {//到时回调nowTime = nowTime.add(repeatPeriod);if (endTime.millisecondsSinceEpoch - nowTime.millisecondsSinceEpoch < 0) {//取消定时器,避免无限回调timer.cancel();timer = null;setState(() {remainTime = '00:00'; //最小限制在00:00});
// print("无限回调???????");widget.childrenCallBack(widget.type); //回调值return null;}caculateTime(nowTime, endTime);});}void start(timerControl){DateTime expiredTimeFormat = DateTime.fromMillisecondsSinceEpoch(timerControl);if(timerControl - DateTime.now().millisecondsSinceEpoch > 0){ startCountDown(expiredTimeFormat);}else{ // 此处为防止进来时就为00:00导致计时器跳动setState(() {remainTime = '00:00';});}}@overridevoid dispose() {super.dispose();// 在页面回收或滑动复用回收的时候一定要把 timer 清除if (_timer != null) {if (_timer.isActive) {_timer.cancel();_timer = null;}}}@overridevoid didUpdateWidget(itemOrderWidget oldWidget) {super.didUpdateWidget(oldWidget);//传入的新值不等于旧值时赋值,避免使用多个倒计时组建时造成的值为上次传入的值if(oldWidget.order != widget.order){ timerControl = widget.order;}// 外部重新请求接口后重新进行倒计时,这个方法是用来监控外部 setState 的start(timerControl);}
}
2.调用
new itemOrderWidget(order:item['statusExpiredUnixTime'],type:'WAITING',childrenCallBack:(value) =>widget.childrenCallBack(value)),
Flutter 倒计时实现相关推荐
- flutter倒计时TimerUtil工具类
更多文章请查看 lutter从入门 到精通 flutter 提供了 Timer 来执行定时任务 common_utils 工具类已经 封装了 Timer 一个计时工具类 TimerUtil,可实现倒计 ...
- Flutter 倒计时功能
一.说明 要实现一个类似上图中滑动列表项倒计时功能,其中剩余时间是需要每分钟更新一次. 二.功能实现 class ItemOrderWidget extends StatefulWidget {fin ...
- Flutter 项目开发指导 从基础入门到精通使用目录
Flutter 从入门 到精通系列文章 本文章为 Flutter 开发中的经验积累分享.教程分享.开发笔记分享目录,持续维护中. 题记 -- 执剑天涯,从你的点滴积累开始,所及之处,必精益求精. Fl ...
- Flutter开发之倒计时/定时器(30)
倒计时/定时器在移动应用开发中比较常见的功能,比如启动时的广告倒计时.比如弹框倒计时.比如定时1秒后跳转.获取验证码等等.今天就认识一下Flutter中的倒计时/定时器. 一般有两种场景: 我只需要你 ...
- Flutter StreamBuilder 实现的一个倒计时功能
题记 -- 执剑天涯,从你的点滴积累开始,所及之处,必精益求精. Flutter是谷歌推出的最新的移动开发框架. [x1]微信公众号的每日提醒 随时随记 每日积累 随心而过 [x2]各种系列的视频教程 ...
- Flutter实现倒计时功能
题记 -- 执剑天涯,从你的点滴积累开始,所及之处,必精益求精,即是折腾每一天. ** 你可能需要 CSDN 网易云课堂教程 掘金 EDU学院教程 知乎 Flutter系列文章 本文是异步编程的定时器 ...
- Flutter布局锦囊---验证码倒计时
设计给的效果如下: 拿到设计后,先把整体拆分成几个部分: "获取验证码按钮",可以通过点击按钮来获取验证码. 然后就可以开始进行编码了. 第1步:绘制组件树 第2步:实现" ...
- Flutter学习之倒计时计时器
1.自定义倒计时计时器控件: import 'dart:async'; import 'package:flutter/material.dart';final TextStyle _availabl ...
- Flutter 快速上手定时器/倒计时及实战讲解
本文微信公众号「AndroidTraveler」首发. 今天给大家讲讲 Flutter 里面定时器/倒计时的实现. 一般有两种场景: 我只需要你在指定时间结束后回调告诉我.回调只需要一次. 我需要你在 ...
最新文章
- shell中的条件表达式
- 一些.net命令行工具的使用
- delphi7下安装TMS component
- TCP/IP(二):IP协议
- mongodb哪些情况适用内嵌,哪些情况适用引用
- 聊聊Java的异常机制问题
- 软件测试工作都干些什么?
- dubbo和zookeper使用_Dubbox与Zookeeper简介及入门小案例
- tn文本分析语言(三):高级语法
- PHP连接 SQLSERVER 注意事项(经典中的经典)
- python操作腾讯文档_python查看文档
- python 前端素材提供
- Symbian操作系统
- c语言指针实验报告总结,指针(C语言实验报告).doc
- delphi第三方组件总述
- Mac键盘突然失灵怎么办?别急,教你打开辅助键盘
- 微博、微信和QQ OAuth2.0开发记录
- 软件销售渠道建设五步曲
- linux解压7z文件,linux 中解压7z文件
- php示例代码之使用MySQLi接口