工具类
class DateCountDownUtil{
//根据总秒数转换为对应的 hh:mm:ss 格式
static String constructTime(int seconds) {
int day = seconds ~/3600 ~/24;
int hour = seconds ~/ 3600 %24;
int minute = seconds % 3600 ~/ 60;
int second = seconds % 60;
if(day != 0){
return formatTime(day)+'天'+formatTime(hour) + "小时" + formatTime(minute) + "分" + formatTime(second)+'秒';
}else if(hour != 0){
return formatTime(hour) + "小时" + formatTime(minute) + "分" + formatTime(second)+'秒';
}else if(minute !=0){
return formatTime(minute) + "分" + formatTime(second)+'秒';
}else if(second!=0){
return formatTime(second)+'秒';
}else {
return '';
}
}
//数字格式化,将 0~9 的时间转换为 00~09
static String formatTime(int timeNum) {
return timeNum < 10 ? "0" + timeNum.toString() : timeNum.toString();
}
//日期时间差 秒数
static difference(startTime,endTime){
return DateTime.parse(startTime).difference(endTime).inSeconds;
}
}
//日期转时间戳
static int dateToTimestamp(String date, {isMicroseconds = false}) {
DateTime dateTime = DateTime.parse(date);
int timestamp = dateTime.millisecondsSinceEpoch;
if (isMicroseconds) {
timestamp = dateTime.microsecondsSinceEpoch;
}
return timestamp;
}
使用
Container(//倒计时显示
child: WTextView('${DateCountDownUtil.constructTime(widget.info.leftSeconds)}',style: getTextStyle(color: Colors.white,fontSize: ScreenUtil().setSp(32),fontWeight: FontWeight.bold),),
),
_cancelTimer() {//界面销毁时记得取消计时器
if (_timer != null) {
_timer.cancel();
_timer = null;
}
}
//需要使用时调用开始倒计时
_startTimer() {
//设置 1 秒回调一次
const period = const Duration(seconds: 1);
_timer = Timer.periodic(period, (timer) {
秒数减一,更新界面
setState(() {
widget.info.leftSeconds --;
});
if (widget.info.leftSeconds == 0) {
//倒计时秒数为0,取消定时器
print('我被取消了 ');
_cancelTimer();
}
});
}
根据日期转倒计时
import 'dart:async';
import 'package:utils/DateCountDownUtil.dart';
import 'package:utils/JadeColors.dart';
import 'package:flutter/material.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart';
/*
* 交易倒计时
* */
class ComeDown extends StatefulWidget {
final int type;
final String endTime;
const ComeDown({this.endTime, this.type});
State<StatefulWidget> createState() {
return _ComeDownState();
}
}
class _ComeDownState extends State<ComeDown> {
Timer timer;
Widget futureTime = Container();
void initState() {
// TODO: implement initState
super.initState();
getTimeData(widget.endTime);
}
getTimeData(String endTime) {
int day;
int hour;
int minute;
int seconds;
int timeStamp = DateCountDownUtil.dateToTimestamp(endTime);
DateTime currentEndTime =
DateTime.fromMillisecondsSinceEpoch(timeStamp);
timer = Timer.periodic(Duration(seconds: 1), (timer) {
setState(() {
day = currentEndTime.difference(DateTime.now()).inDays;
hour = currentEndTime.difference(DateTime.now()).inHours - day * 24;
minute = currentEndTime.difference(DateTime.now()).inMinutes -
day * 24 * 60 -
hour * 60;
seconds = currentEndTime.difference(DateTime.now()).inSeconds -
day * 24 * 60 * 60 -
hour * 60 * 60 -
minute * 60;
futureTime = currentEndTime.difference(DateTime.now()).inSeconds < 0
? Text(
S.current.yijiesu,
style: TextStyle(
height: 1,
fontSize: 28.sp,
color: JadeColors.grey_2),
)
: Row(
children: [
getText(day),
SizedBox(
width: 3,
),
Text(
S.current.tianshu,
style: TextStyle(fontSize: 28.sp, color: JadeColors.grey_2),
),
SizedBox(
width: 3,
),
getText(hour),
SizedBox(
width: 3,
),
Text(
S.current.xiaoshi,
style: TextStyle(fontSize: 28.sp, color: JadeColors.grey_2),
),
SizedBox(
width: 3,
),
getText(minute),
SizedBox(
width: 3,
),
Text(
S.current.fenzhong,
style: TextStyle(fontSize: 28.sp, color: JadeColors.grey_2),
),
SizedBox(
width: 3,
),
getText(seconds),
SizedBox(
width: 3,
),
Text(
S.current.miaoshu,
style: TextStyle(fontSize: 13, color: JadeColors.grey_2),
)
],
);
});
});
}
void dispose() {
// TODO: implement dispose
super.dispose();
timer.cancel();
timer = null;
}
Widget build(BuildContext context) {
return Column(
children: [
futureTime,
SizedBox(
height: 20.w,
),
Text(
'交易倒计时',
style: TextStyle(
height: 1,
fontSize: 22.sp,
color: JadeColors.grey),
)
],
);
}
Widget getText(int time) {
return Text(
"${time < 0 ? 0 : time}",
style: TextStyle(
height: 1,
fontWeight: FontWeight.w600,
fontSize: 11,
color: widget.type == 0 ? Color(0xFF63A4F8) : Color(0xFFF97483)),
);
}
}
class DateCountDownUtil{
//根据总秒数转换为对应的 hh:mm:ss 格式
static String constructTime(int seconds) {
int day = seconds ~/3600 ~/24;
int hour = seconds ~/ 3600 %24;
int minute = seconds % 3600 ~/ 60;
int second = seconds % 60;
if(day != 0){
return formatTime(day)+'天'+formatTime(hour) + "小时" + formatTime(minute) + "分" + formatTime(second)+'秒';
}else if(hour != 0){
return formatTime(hour) + "小时" + formatTime(minute) + "分" + formatTime(second)+'秒';
}else if(minute !=0){
return formatTime(minute) + "分" + formatTime(second)+'秒';
}else if(second!=0){
return formatTime(second)+'秒';
}else {
return '';
}
}
//根据总秒数转换为对应的 hh:mm:ss 格式
static String constructTimeTwo(int seconds) {
int day = seconds ~/3600 ~/24;
int hour = seconds ~/ 3600 %24;
int minute = seconds % 3600 ~/ 60;
int second = seconds % 60;
if(day != 0){
return formatTime(day)+':'+formatTime(hour) + ":" + formatTime(minute) + ":" + formatTime(second);
}else if(hour != 0){
return formatTime(hour) + ":" + formatTime(minute) + ":" + formatTime(second);
}else if(minute !=0){
return formatTime(minute) + ":" + formatTime(second);
}else if(second!=0){
return formatTime(second);
}else {
return '';
}
}
//数字格式化,将 0~9 的时间转换为 00~09
static String formatTime(int timeNum) {
return timeNum < 10 ? "0" + timeNum.toString() : timeNum.toString();
}
//日期时间差 秒数
static difference(startTime,endTime){
return DateTime.parse(startTime).difference(endTime).inSeconds;
}
///日期转时间戳
static int dateToTimestamp(String date, {isMicroseconds = false}) {
DateTime dateTime = DateTime.parse(date);
int timestamp = dateTime.millisecondsSinceEpoch;
if (isMicroseconds) {
timestamp = dateTime.microsecondsSinceEpoch;
}
return timestamp;
}
}
使用
ComeDown(
endTime: articleBean.articleInfo?.newWanthaveArticlePOJO?.tradeEndTime,
type: articleBean.articleInfo.cateId == 30 ?0:1,
)