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

Flutter:组件10、倒计时

import 'dart:async';
import 'package:flutter/material.dart';class CountdownTimer extends StatefulWidget {final int seconds;final double? fontSize;final Color? textColor;final bool showDays;final bool showHours;final bool showMinutes;final bool showSeconds;final String separator;const CountdownTimer({super.key,required this.seconds,this.fontSize,this.textColor,this.showDays = true,this.showHours = true,this.showMinutes = true,this.showSeconds = true,this.separator = " : ",});@overrideState<CountdownTimer> createState() => _CountdownTimerState();
}class _CountdownTimerState extends State<CountdownTimer> {late Timer _timer;late int _remainingSeconds;bool _mounted = true;@overridevoid initState() {super.initState();_remainingSeconds = widget.seconds;_startTimer();}@overridevoid dispose() {_mounted = false;_timer.cancel();super.dispose();}void _startTimer() {_timer = Timer.periodic(const Duration(seconds: 1), (timer) {if (!_mounted) return;setState(() {if (_remainingSeconds > 0) {_remainingSeconds--;} else {_timer.cancel();}});});}String _formatNumber(int number) {return number.toString().padLeft(2, '0');}@overrideWidget build(BuildContext context) {final days = _remainingSeconds ~/ (24 * 3600);final hours = (_remainingSeconds % (24 * 3600)) ~/ 3600;final minutes = (_remainingSeconds % 3600) ~/ 60;final seconds = _remainingSeconds % 60;List<String> timeParts = [];if (widget.showDays && days > 0) {timeParts.add(_formatNumber(days));}if (widget.showHours) {timeParts.add(_formatNumber(hours));}if (widget.showMinutes) {timeParts.add(_formatNumber(minutes));}if (widget.showSeconds) {timeParts.add(_formatNumber(seconds));}return Text(timeParts.join(widget.separator),style: TextStyle(fontSize: widget.fontSize ?? 14,color: widget.textColor ?? Colors.black,),);}
} 

使用方式

// 基本使用
CountdownTimer(seconds: 3600, // 1小时
)// 自定义样式
CountdownTimer(seconds: 3600,fontSize: 20,textColor: Colors.red,
)// 只显示分秒
CountdownTimer(seconds: 3600,showDays: false,showHours: false,
)// 自定义分隔符
CountdownTimer(seconds: 3600,separator: " - ",
)
http://www.dtcms.com/a/162869.html

相关文章:

  • python如何流模式输出
  • rsync命令详解与实用案例
  • SQLyog中DELIMITER执行存储过程时出现的前置缩进问题
  • 全局id生成器生产方案
  • 23种设计模式-行为型模式之中介者模式(Java版本)
  • 【C++】模板为什么要extern?
  • Cursor —— AI编辑器 使用详解
  • PDF Shaper v15.0
  • vscode chrome调试怎么在所有浏览器都好使
  • 客运从业资格证考试科目有哪些
  • 1.1探索 LLaMA-Factory:大模型微调的一站式解决方案
  • RabbitMQ Linux 安装教程详解
  • 双系统,bios默认设置启动ubuntu+ubuntu改启动grub设置
  • 【仿真】Ubuntu 22.04 安装MuJoCo 3.3.2
  • 高等数学-第七版-下册 选做记录 习题9-5
  • Spring是如何实现ApplicationContext应用上下文
  • 提示词工程实战指南:解锁AI创作的隐藏技巧与实例
  • 大模型在肾癌诊疗全流程中的应用研究报告
  • iOS—仿tableView自定义闹钟列表
  • KUKA机器人关机时冷启动介绍
  • iOS - 音频: Core Audio - 播放
  • Java云原生+quarkus
  • python:sklearn 主成分分析(PCA)
  • Android 手动删除 AAR jar 包 中的文件
  • Weka通过10天的内存指标数据计算内存指标动态阈值
  • Mac 创建QT按钮以及一些操作
  • Kafka的Rebalance机制可能引发什么问题?如何优化?怎么减少不必要的Rebalance
  • 四.割草机技术总结--4.基站发送给流动站的差分数据传输标准RTCM
  • Elasticsearch 内存使用指南
  • milvus编译与使用