当前位置: 首页 > 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: " - ",
)

相关文章:

  • 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机器人关机时冷启动介绍
  • 科学家为AI模型设置“防火墙”,以防止被不法分子滥用
  • 大型长读长RNA测序数据集发布,有助制定精准诊疗策略
  • 非法收受财物逾1648万,湖南原副厅级干部康月林一审被判十年半
  • 国家发改委回应美加征关税:典型的单边主义霸凌做法
  • 大家聊中国式现代化|陶希东:打造高水平安全韧性城市,给群众看得见的安全感
  • 新任海南琼海市委副书记陈明已主持市政府党组全面工作