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 倒计时实现相关推荐

  1. flutter倒计时TimerUtil工具类

    更多文章请查看 lutter从入门 到精通 flutter 提供了 Timer 来执行定时任务 common_utils 工具类已经 封装了 Timer 一个计时工具类 TimerUtil,可实现倒计 ...

  2. Flutter 倒计时功能

    一.说明 要实现一个类似上图中滑动列表项倒计时功能,其中剩余时间是需要每分钟更新一次. 二.功能实现 class ItemOrderWidget extends StatefulWidget {fin ...

  3. Flutter 项目开发指导 从基础入门到精通使用目录

    Flutter 从入门 到精通系列文章 本文章为 Flutter 开发中的经验积累分享.教程分享.开发笔记分享目录,持续维护中. 题记 -- 执剑天涯,从你的点滴积累开始,所及之处,必精益求精. Fl ...

  4. Flutter开发之倒计时/定时器(30)

    倒计时/定时器在移动应用开发中比较常见的功能,比如启动时的广告倒计时.比如弹框倒计时.比如定时1秒后跳转.获取验证码等等.今天就认识一下Flutter中的倒计时/定时器. 一般有两种场景: 我只需要你 ...

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

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

  6. Flutter实现倒计时功能

    题记 -- 执剑天涯,从你的点滴积累开始,所及之处,必精益求精,即是折腾每一天. ** 你可能需要 CSDN 网易云课堂教程 掘金 EDU学院教程 知乎 Flutter系列文章 本文是异步编程的定时器 ...

  7. Flutter布局锦囊---验证码倒计时

    设计给的效果如下: 拿到设计后,先把整体拆分成几个部分: "获取验证码按钮",可以通过点击按钮来获取验证码. 然后就可以开始进行编码了. 第1步:绘制组件树 第2步:实现" ...

  8. Flutter学习之倒计时计时器

    1.自定义倒计时计时器控件: import 'dart:async'; import 'package:flutter/material.dart';final TextStyle _availabl ...

  9. Flutter 快速上手定时器/倒计时及实战讲解

    本文微信公众号「AndroidTraveler」首发. 今天给大家讲讲 Flutter 里面定时器/倒计时的实现. 一般有两种场景: 我只需要你在指定时间结束后回调告诉我.回调只需要一次. 我需要你在 ...

最新文章

  1. shell中的条件表达式
  2. 一些.net命令行工具的使用
  3. delphi7下安装TMS component
  4. TCP/IP(二):IP协议
  5. mongodb哪些情况适用内嵌,哪些情况适用引用
  6. 聊聊Java的异常机制问题
  7. 软件测试工作都干些什么?
  8. dubbo和zookeper使用_Dubbox与Zookeeper简介及入门小案例
  9. tn文本分析语言(三):高级语法
  10. PHP连接 SQLSERVER 注意事项(经典中的经典)
  11. python操作腾讯文档_python查看文档
  12. python 前端素材提供
  13. Symbian操作系统
  14. c语言指针实验报告总结,指针(C语言实验报告).doc
  15. delphi第三方组件总述
  16. Mac键盘突然失灵怎么办?别急,教你打开辅助键盘
  17. 微博、微信和QQ OAuth2.0开发记录
  18. 软件销售渠道建设五步曲
  19. linux解压7z文件,linux 中解压7z文件
  20. php示例代码之使用MySQLi接口

热门文章

  1. HP-UX实战:扩展HP小机rx8640上的swap和dump空间
  2. huawei euleros - 用宝塔面板安装nginx
  3. 驱动认知 驱动的编写
  4. Linux Ubuntu下的文件IO介绍及实例应用(C语言)
  5. 浅谈APP开发报价单的组成
  6. 四位行波进位加法器_超前进位加法器amp;行波进位加法器
  7. 使用 Blender 构建虚拟相机以及三维测试场景
  8. 【白话机器学习系列】白话向量点积
  9. 使用DOM4J解析XML文档
  10. 联邦学习——用data-free知识蒸馏处理Non-IID