Flutter自定义年月日倒计时

这篇文章主要为大家详细介绍了Flutter自定义年月日倒计时,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了Flutter自定义年月日倒计时的具体代码,供大家参考,具体内容如下

因项目中的订单页需要一个定时器,比如下单后需要进行倒计时,等倒计时完后,订单状态自动关闭。

如图:

这里显示等17分25秒就是我们所需要做的功能。

项目里还有其他倒计时类型,比如年月日,天之类的,

先上一个工具类:

//时间格式化,根据总秒数转换为对应的 hh:mm:ss 格式   static String constructTime(int seconds) {     int day = seconds ~/3600 ~/24;     int hour = seconds ~/ 3600;     int minute = seconds % 3600 ~/ 60;     int second = seconds % 60;     if(day != 0){       return '$day天$hour小时$minute分$second秒后自动取消';     }else if(hour != 0){       return '$hour小时$minute分$second秒后自动取消';     }else if(minute !=0){       return '$minute分$second秒后自动取消';     }else if(second!=0){       return '$second秒后自动取消';     }else {       return '';     } //    return formatTime(day)+'天'+formatTime(hour) + "小时" + formatTime(minute) + "分" + formatTime(second)+'秒后自动取消';   }   static String constructVipTime(int seconds) {     int day = seconds ~/3600 ~/ 24;     int hour = seconds ~/ 3600;     int minute = seconds % 3600 ~/ 60;     int second = seconds % 60;     if(day!= 0){       return '剩$day天$hour小时$minute分';     }else if(hour!= 0){       return '剩$hour小时$minute分';     }else if(minute!=0){       return '剩$minute分';     }else {       return '';     } //    return formatTime(day)+'天'+formatTime(hour) + "小时" + formatTime(minute) + "分" + formatTime(second)+'秒后自动取消';   }   //数字格式化,将 0~9 的时间转换为 00~09   static String formatTime(int timeNum) {     return timeNum <10 ? "0" + timenum.tostring() : timenum.tostring();   }< pre>

再看一下如何使用:

class OrderPageState extends State {   String countContent ; // 倒计时内容   Timer _timer;   int seconds = 0;   ///.......    @override   Widget build(BuildContext context) {     countContent = Util.constructTime(seconds);     return new Scaffold(         appBar: HeadTitleBar(           text: '订单详情',           rightShow: true,           rightIcPath: ImageConstant.icon_talk_black,           callback: (){             RouteUtil.jump2ChatPage(context);           },),         body: _buildRoot());   }        void cancelTimer() {     if (_timer != null) {       _timer.cancel();       _timer = null;     }   }   void startTimer() {     //设置 1 秒回调一次     const period = const Duration(seconds: 1);     _timer = Timer.periodic(period, (timer) {       //更新界面       setState(() {         //秒数减一,因为一秒回调一次         seconds --; //        print('我在更新界面>>>>>>>>>>>>>> $seconds');       });       if (seconds == 0) {         //倒计时秒数为0,取消定时器         print('我被取消了  ');         cancelTimer();         getData();       }     });   }     void getData() async{     await DioUtil.request("xxx",       method: DioUtil.GET,       ).then((res) {         var time = res.orderExprieTime;         if(time !=null){           try{             var _diffDate = DateTime.parse(time.toString());             //获取当期时间             var now = DateTime.now();             var twoHours = _diffDate.difference(now);             //获取总秒数,2 分钟为 120 秒             seconds = twoHours.inSeconds;             startTimer();           }catch(e){             seconds = 0;           }         }       }       loading = true;       if(!mounted)return;       setState(() {       });     }).catchError((e){     });   }     @override   void dispose() {     super.dispose();     cancelTimer();   } }

注意:一定要在dispose方法中销毁该定时器,不然会一只走下去的,其中countContent可以写在具体的text中,大概就是这样。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持0133技术站。

以上就是Flutter自定义年月日倒计时的详细内容,更多请关注0133技术站其它相关文章!

赞(0) 打赏
未经允许不得转载:0133技术站首页 » 移动