当前位置: 首页 > news >正文

Flutter实现倒计时功能,秒数转时分秒,然后倒计时

Flutter实现倒计时功能
发布时间:2023/05/12
本文实例为大家分享了Flutter实现倒计时功能的具体代码,供大家参考,具体内容如下

有一个需求,需要在页面进行显示倒计时,倒计时结束后,做相应的逻辑处理。

实现思路:在Flutter中,Timer.periodic提供了循环功能,查看函数定义:

factory Timer.periodic(Duration duration, void callback(Timer timer))

第一个参数就是时间间隔,第二个参数就是事件处理回调。

由于后台返回的是秒数,所以需要根据总秒数计算小时,分钟,秒。同时,当不满一个小时时,只显示分钟和秒数,当分钟和秒数只有一个数时(比如1分8秒,显示为01:08)前面加“0”处理。

完整代码:

import 'package:flutter/material.dart';
import 'dart:async';class CounterDownPage extends StatefulWidget {@override_CounterDownPageState createState() => _CounterDownPageState();
}class _CounterDownPageState extends State<CounterDownPage> {// 用来在布局中显示相应的剩余时间String remainTimeStr = '';Timer _timer;//倒计时 void startCountDown(int time) {// 重新计时的时候要把之前的清除掉if (_timer != null) {if (_timer.isActive) {_timer.cancel();_timer = null;}}if (time <= 0) {return;}var countTime = time;const repeatPeriod = const Duration(seconds: 1);_timer = Timer.periodic(repeatPeriod, (timer) { if (countTime <= 0) {timer.cancel();timer = null;//待付款倒计时结束,可以在这里做相应的操作return;}countTime--;//外面传进来的单位是秒,所以需要根据总秒数,计算小时,分钟,秒int hour = (countTime ~/ 3600) % 24;//如果不止24小时的就不用%24int minute = countTime % 3600 ~/60;int second = countTime % 60;var str = '';if (hour > 0) {str = str + hour.toString()+':';}if (minute / 10 < 1) {//当只有个位数时,给前面加“0”,实现效果:“:01”,":02"str = str + '0' + minute.toString() + ":";} else {str = str + minute.toString() + ":";}if (second / 10 < 1) {str = str + '0' + second.toString();} else {str = str + second.toString();}setState(() {remainTimeStr = str;});});}@overridevoid initState() {super.initState();//开始倒计时,这里传入的是秒数startCountDown(5000);}@overridevoid dispose() {super.dispose();if (_timer != null) {if (_timer.isActive) {_timer.cancel();_timer = null;}}}@overrideWidget build(BuildContext context) {return Scaffold(appBar: AppBar(title: Text("倒计时"),),body: Center(child: Row(mainAxisAlignment: MainAxisAlignment.center,children: [Text("剩余", style: TextStyle(fontSize: 18,color: Color.fromRGBO(255, 111, 50, 1),fontWeight: FontWeight.bold),),Text(remainTimeStr.length > 0 ? remainTimeStr: "--", style: TextStyle(fontSize: 18,color: Color.fromRGBO(255, 111, 50, 1),fontWeight: FontWeight.bold),),],),),);}
}

在这里插入图片描述
服务器返回的时间戳87392,现在的时间戳+87392 现在的时间戳,两者的时间戳相差二十多个小时,也就是说87392就是秒数,直接传秒数到上面的startCountDown方法即可。

http://www.lryc.cn/news/126026.html

相关文章:

  • 【hadoop】windows上hadoop环境的搭建步骤
  • 一周在榜9本计算机专业新书
  • CSS变形与动画(二):perspctive透视效果 与 preserve-3d 3d效果(奥运五环例子)
  • [论文笔记]Glancing Transformer for Non-Autoregressive Neural Machine Translation
  • 视觉学习(七)---Flask 框架下接口调用及python requests 实现json字符串传输
  • unity编写树形结构的文件管理页面
  • 基于单片机的家用智能浇灌系统
  • Solr的入门使用
  • css鼠标样式 cursor: pointer
  • 【解决】Kafka Exception thrown when sending a message with key=‘null‘ 异常
  • 中心极限定理 简明教程
  • 商城-学习整理-基础-库存系统(八)
  • 【C++ 学习 ⑬】- 详解 list 容器
  • 设计模式十五:命令模式(Command Pattern)
  • FPGA GTP全网最细讲解,aurora 8b/10b协议,HDMI视频传输,提供4套工程源码和技术支持
  • 用dcker极简打包java.jar镜像并启动
  • 设计模式——创建型
  • iTOP-i.MX8M开发板添加USB网络设备驱动
  • 分类预测 | MATLAB实现GAPSO-LSSVM多输入分类预测
  • JMeter 的并发设置教程
  • 数据治理有哪些产品
  • windows安装go,以及配置工作区,配置vscode开发环境
  • 第五章nginx负载均衡
  • MATLAB计算一组坐标点的相互距离(pdist、squareform、pdist2函数)
  • 我国农机自动驾驶系统需求日益增长,北斗系统赋能精准农业
  • 防雷检测行业应用完整解决方案
  • 16.4 【Linux】特殊文件与程序
  • qrcode.react生成二维码
  • ETF套利及交易者如何进行套利的
  • 了解异或的好处和用途