Flutter天时分秒倒计时

工具类

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,
              )
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Flutter中,可以使用Future来实现倒计时功能。下面是一个使用Future实现倒计时的代码示例: ```dart import 'package:flutter/material.dart'; void main() { runApp(MyApp()); } class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( title: '倒计时示例', theme: ThemeData( primarySwatch: Colors.blue, ), home: CountDownPage(), ); } } class CountDownPage extends StatefulWidget { @override _CountDownPageState createState() => _CountDownPageState(); } class _CountDownPageState extends State<CountDownPage> { int countDownValue = 10; @override void initState() { super.initState(); startCountDown(); } void startCountDown() { Future.delayed(Duration(seconds: 1), () { setState(() { countDownValue--; }); if (countDownValue > 0) { startCountDown(); } }); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text('倒计时示例'), ), body: Center( child: Text( '倒计时:$countDownValue', style: TextStyle(fontSize: 24), ), ), ); } } ``` 上述代码展示了如何创建一个名为CountDownPage的StatefulWidget,其中使用Future.delayed来实现倒计时的逻辑。在initState中调用了startCountDown方法来启动倒计时,每秒减少countDownValue的值,并通过setState来更新页面。当countDownValue为0时,停止倒计时。 在构建页面时,使用了Center和Text组件来展示倒计时的数值。 通过这种方式,我们可以在Flutter中使用Future来实现简单的倒计时功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值