Flutter 倒计时功能
一、说明
要实现一个类似上图中滑动列表项倒计时功能,其中剩余时间是需要每分钟更新一次。
二、功能实现
class ItemOrderWidget extends StatefulWidget {final OrderEntity order;ItemOrderWidget({Key key,this.order,}) : super(key: key);@override_ItemOrderWidgetState createState() {return _ItemOrderWidgetState();}
}class _ItemOrderWidgetState extends State<ItemOrderWidget> {// 用来在布局中显示相应的剩余时间String remainTime = '';Timer _timer;@overridevoid initState() {super.initState();// 初始化的时候开启倒计时startCountDown(widget.order.validEndTime);}@overridevoid dispose() {super.dispose();// 在页面回收或滑动复用回收的时候一定要把 timer 清除if (_timer != null) {if (_timer.isActive) {_timer.cancel();_timer = null;}}}@overridevoid didUpdateWidget(ItemOrderWidget oldWidget) {super.didUpdateWidget(oldWidget);// 外部重新请求接口后重新进行倒计时,这个方法是用来监控外部 setState 的startCountDown(widget.order.validEndTime);}void startCountDown(time){var nowTime = DateTime.now();var endTime = DateTime.parse(time.toString());// 如果剩余时间已经不足一分钟,则不必计时,直接标记超时if (endTime.millisecondsSinceEpoch - nowTime.millisecondsSinceEpoch < 1000 * 60) {setState(() {remainTime = '超时';});return;}// 重新计时的时候要把之前的清除掉if (_timer != null) {if (_timer.isActive) {_timer.cancel();_timer = null;}}const repeatPeriod = const Duration(minutes: 1);caculateTime(nowTime, endTime);_timer = Timer.periodic(repeatPeriod, (timer) {//到时回调nowTime = nowTime.add(repeatPeriod);if (endTime.millisecondsSinceEpoch - nowTime.millisecondsSinceEpoch < 1000 * 60) {//取消定时器,避免无限回调timer.cancel();timer = null;setState(() {remainTime = '超时';});return;}caculateTime(nowTime, endTime);});}/// 计算天数、小时、分钟、秒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;var str = '';if (day > 0) {str = day.toString() + '天';}if (hour > 0 || (day > 0 && hour == 0)) {str = str + hour.toString() + '小时';}str = str + minute.toString() + '分钟';setState(() {remainTime = str;});}
}
搞定 !
Flutter 倒计时功能相关推荐
- Flutter StreamBuilder 实现的一个倒计时功能
题记 -- 执剑天涯,从你的点滴积累开始,所及之处,必精益求精. Flutter是谷歌推出的最新的移动开发框架. [x1]微信公众号的每日提醒 随时随记 每日积累 随心而过 [x2]各种系列的视频教程 ...
- android京东秒杀倒计时,js实现京东秒杀倒计时功能
本文实例为大家分享了js实现京东秒杀倒计时功能的具体代码,供大家参考,具体内容如下 首先给大家看看效果图,因为是做的移动端的,所以放大给大家看看局部就行: 关于实现京东秒杀,之前用过其他的方法,今天给 ...
- 黯然微信小程序杂记(三):微信小程序实现倒计时功能 附讲解教学 附源码
黯然微信小程序杂记(三):微信小程序实现倒计时功能 附超详细注释 附源码 一.功能描述 二.界面展示 三.test.wxml代码 四.test.js代码(注释很详细 很易懂) CSDN私信我,有关微信 ...
- python 倒计时功能怎么用print实现_python 实现倒计时功能(gui界面)
运行效果: 完整源码: ##import library from tkinter import * import time from playsound import playsound ## di ...
- android倒计时功能,android实现倒计时功能(开始、暂停、0秒结束)
本文实例为大家分享了android实现倒计时功能的具体代码,供大家参考,具体内容如下 [思路]:通过 timer 执行周期延时的任务,handler 中将计时信息更新,并在计时结束时结束 timer ...
- js 常用倒计时功能:
为什么80%的码农都做不了架构师?>>> 简单的倒计时功能: <!DOCTYPE html> <html lang="en"> ...
- 使用 FlipClock.js 制作精美的时钟、定时器和倒计时功能
FlipClock.js 被创建出来是因为其他的解决方案不够抽象,不能够在不重写的代码的情况下提供了深层次的自定义.有些库的参数过多,而另外一些则是脚本中的硬编码太多,不够灵活. 在参考许多现有的解决 ...
- android倒计时功能,Android 实现列表倒计时功能
Android 实现列表倒计时功能 发布时间:2020-08-21 21:47:11 来源:脚本之家 阅读:147 作者:Choi晨 单个计时器,然后遍历数据 刷新条目: 两种实现方式:1.Handl ...
- ios nstimer实现延时_IOS_IOS开发代码分享之用nstimer实现倒计时功能,用nstimer实现倒计时功能,废话 - phpStudy...
IOS开发代码分享之用nstimer实现倒计时功能 用nstimer实现倒计时功能,废话不多说,直接上代码,详细解释请参照注释 // [NSTimer scheduledTimerWithTimeIn ...
最新文章
- 可汗学院向量入门 矩阵入门
- LOST 迷失 Season 1
- 判断tvs能抗住多少千伏浪涌的依据_TVS浪涌保护介绍
- PMP知识点(三、范围管理)
- HOL中的四种排序,Order By、Sort By、Distribute By、Cluster By
- 安卓怎么显示res文件夹中的html_android中自定义WebView显示网页或本地html文件 | 学步园...
- SQL Server 2008如何导出带数据的脚本文件
- 心电图计算心率公式_心电图到底能反应啥问题,看过之后你也能当“医生”
- ASP.NET操作DataTable各种方法总结(给Datatable添加行列、DataTable选择排序等)
- 用极大化思想解决最大子矩形问题
- 北京市委书记蔡奇:加快拓展数字人民币应用全场景试点
- Oracle创建数据库出错,oracle 10g dbca创建数据库出错 急急急
- apache php 关闭版本号显示,不显示版本号
- mysql 分表例子_mysql分表查询的简单例子
- ubuntu中的坑——Ubuntu中一些常用的软件和火狐浏览器插件的安装
- U盘安装kali系统
- matlab仿真高尔顿正态分布源码,杂谈 | 正态分布为什么如此常见
- matlab什么样的数表示0,matlab里a(i)~=0什么意思
- 奖学金——信息学奥赛一本通1179题解
- 如何使用Arduino开发板读/写SD卡模块的数据
热门文章
- 读了本号称“App架构师实践指南”的书
- 《薄冰实用英语语法详解》独家连载之十六:名词性从句
- java毕业设计网络办公系统mybatis+源码+调试部署+系统+数据库+lw
- Linux ssh登录命令
- 概率论-随机事件与概率思维导图
- JS函数式编程思维:柯里化、闭包
- 第一章 计算机网络概述
- 简拼为sz的词语_十字的成语_分类成语素材_作文素材_中国儿童资源网
- 太强了,这款开源日历工具库堪称神器!
- arctime如何调整字幕 arctime调整字幕教程