一、说明

要实现一个类似上图中滑动列表项倒计时功能,其中剩余时间是需要每分钟更新一次。

二、功能实现

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 倒计时功能相关推荐

  1. Flutter StreamBuilder 实现的一个倒计时功能

    题记 -- 执剑天涯,从你的点滴积累开始,所及之处,必精益求精. Flutter是谷歌推出的最新的移动开发框架. [x1]微信公众号的每日提醒 随时随记 每日积累 随心而过 [x2]各种系列的视频教程 ...

  2. android京东秒杀倒计时,js实现京东秒杀倒计时功能

    本文实例为大家分享了js实现京东秒杀倒计时功能的具体代码,供大家参考,具体内容如下 首先给大家看看效果图,因为是做的移动端的,所以放大给大家看看局部就行: 关于实现京东秒杀,之前用过其他的方法,今天给 ...

  3. 黯然微信小程序杂记(三):微信小程序实现倒计时功能 附讲解教学 附源码

    黯然微信小程序杂记(三):微信小程序实现倒计时功能 附超详细注释 附源码 一.功能描述 二.界面展示 三.test.wxml代码 四.test.js代码(注释很详细 很易懂) CSDN私信我,有关微信 ...

  4. python 倒计时功能怎么用print实现_python 实现倒计时功能(gui界面)

    运行效果: 完整源码: ##import library from tkinter import * import time from playsound import playsound ## di ...

  5. android倒计时功能,android实现倒计时功能(开始、暂停、0秒结束)

    本文实例为大家分享了android实现倒计时功能的具体代码,供大家参考,具体内容如下 [思路]:通过 timer 执行周期延时的任务,handler 中将计时信息更新,并在计时结束时结束 timer ...

  6. js 常用倒计时功能:

    为什么80%的码农都做不了架构师?>>>    简单的倒计时功能: <!DOCTYPE html>   <html lang="en"> ...

  7. 使用 FlipClock.js 制作精美的时钟、定时器和倒计时功能

    FlipClock.js 被创建出来是因为其他的解决方案不够抽象,不能够在不重写的代码的情况下提供了深层次的自定义.有些库的参数过多,而另外一些则是脚本中的硬编码太多,不够灵活. 在参考许多现有的解决 ...

  8. android倒计时功能,Android 实现列表倒计时功能

    Android 实现列表倒计时功能 发布时间:2020-08-21 21:47:11 来源:脚本之家 阅读:147 作者:Choi晨 单个计时器,然后遍历数据 刷新条目: 两种实现方式:1.Handl ...

  9. ios nstimer实现延时_IOS_IOS开发代码分享之用nstimer实现倒计时功能,用nstimer实现倒计时功能,废话 - phpStudy...

    IOS开发代码分享之用nstimer实现倒计时功能 用nstimer实现倒计时功能,废话不多说,直接上代码,详细解释请参照注释 // [NSTimer scheduledTimerWithTimeIn ...

最新文章

  1. 可汗学院向量入门 矩阵入门
  2. LOST 迷失 Season 1
  3. 判断tvs能抗住多少千伏浪涌的依据_TVS浪涌保护介绍
  4. PMP知识点(三、范围管理)
  5. HOL中的四种排序,Order By、Sort By、Distribute By、Cluster By
  6. 安卓怎么显示res文件夹中的html_android中自定义WebView显示网页或本地html文件 | 学步园...
  7. SQL Server 2008如何导出带数据的脚本文件
  8. 心电图计算心率公式_心电图到底能反应啥问题,看过之后你也能当“医生”
  9. ASP.NET操作DataTable各种方法总结(给Datatable添加行列、DataTable选择排序等)
  10. 用极大化思想解决最大子矩形问题
  11. 北京市委书记蔡奇:加快拓展数字人民币应用全场景试点
  12. Oracle创建数据库出错,oracle 10g dbca创建数据库出错 急急急
  13. apache php 关闭版本号显示,不显示版本号
  14. mysql 分表例子_mysql分表查询的简单例子
  15. ubuntu中的坑——Ubuntu中一些常用的软件和火狐浏览器插件的安装
  16. U盘安装kali系统
  17. matlab仿真高尔顿正态分布源码,杂谈 | 正态分布为什么如此常见
  18. matlab什么样的数表示0,matlab里a(i)~=0什么意思
  19. 奖学金——信息学奥赛一本通1179题解
  20. 如何使用Arduino开发板读/写SD卡模块的数据

热门文章

  1. 读了本号称“App架构师实践指南”的书
  2. 《薄冰实用英语语法详解》独家连载之十六:名词性从句
  3. java毕业设计网络办公系统mybatis+源码+调试部署+系统+数据库+lw
  4. Linux ssh登录命令
  5. 概率论-随机事件与概率思维导图
  6. JS函数式编程思维:柯里化、闭包
  7. 第一章 计算机网络概述
  8. 简拼为sz的词语_十字的成语_分类成语素材_作文素材_中国儿童资源网
  9. 太强了,这款开源日历工具库堪称神器!
  10. arctime如何调整字幕 arctime调整字幕教程