Flutter 颤振倒计时

Flutter 颤振倒计时,flutter,timer,widget,Flutter,Timer,Widget,我想做一个颤振倒计时来显示剩余的注册时间(DD-HH-MM) 例如: 实现这一点最有效的方法是什么 谢谢根据您的设计和要求更改以下代码 DateTime startTime = DateTime(2020,03,04); Duration remaining = DateTime.now().difference(DateTime.now()); Timer t; int days=0,hrs =0, mins=0; @override void initState(){

我想做一个颤振倒计时来显示剩余的注册时间(DD-HH-MM)

例如:

实现这一点最有效的方法是什么


谢谢

根据您的设计和要求更改以下代码

DateTime startTime = DateTime(2020,03,04);
  Duration remaining = DateTime.now().difference(DateTime.now());
  Timer t;
  int days=0,hrs =0, mins=0;

  @override
  void initState(){
    super.initState();
    startTimer();
  }

  startTimer()async{
    t = Timer.periodic(Duration(seconds:1),(timer){
      setState((){
      remaining = DateTime.now().difference(startTime);
        mins = remaining.inMinutes;
        hrs = mins>=60 ? mins~/60:0;
        days = hrs>=24 ? hrs~/24: 0;
        hrs = hrs%24;
        mins = mins%60;
      });

    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
        backgroundColor: Colors.white,
        body: Center(
            child: Column(
          mainAxisSize: MainAxisSize.min,
          children: <Widget>[
            Padding(
              padding: const EdgeInsets.all(8.0),
              child: Text('Registration closes in',
                  style: TextStyle(color: Colors.black, fontSize: 20),
                  textAlign: TextAlign.center),
            ),
            Row(
              mainAxisAlignment:MainAxisAlignment.spaceEvenly,
              children: [
              Expanded(
                child: Padding(
                  padding: const EdgeInsets.all(8.0),
                  child: Text('$days',
                      style: TextStyle(color: Colors.black, fontSize: 20),
                             textAlign:TextAlign.center,),
                ),
              ),
              Expanded(
                child: Padding(
                  padding: const EdgeInsets.all(8.0),
                  child: Text('$hrs',
                      style: TextStyle(color: Colors.black, fontSize: 20),
                             textAlign:TextAlign.center,),
                ),
              ),
              Expanded(
                child: Padding(
                  padding: const EdgeInsets.all(8.0),
                  child: Text('$mins',
                      style: TextStyle(color: Colors.black, fontSize: 20),
                             textAlign:TextAlign.center,),
                ),
              ),
            ]),
            Row(
              mainAxisAlignment:MainAxisAlignment.spaceEvenly,
              children: [
              Expanded(
                child: Padding(
                  padding: const EdgeInsets.all(8.0),
                  child: Text('Days',
                      style: TextStyle(color: Colors.black, fontSize: 16),
                             textAlign:TextAlign.center,),
                ),
              ),
              Expanded(
                child: Padding(
                  padding: const EdgeInsets.all(8.0),
                  child: Text('Hours',
                      style: TextStyle(color: Colors.black, fontSize: 16),
                             textAlign:TextAlign.center,),
                ),
              ),
              Expanded(
                child: Padding(
                  padding: const EdgeInsets.all(8.0),
                  child: Text('Minutes',
                      style: TextStyle(color: Colors.black, fontSize: 16),
                             textAlign:TextAlign.center,),
                ),
              ),
            ]),
          ],
        )));
  }
DateTime startTime=DateTime(2020,03,04);
剩余持续时间=DateTime.now().difference(DateTime.now());
定时器t;
整数天=0,小时=0,分钟=0;
@凌驾
void initState(){
super.initState();
startTimer();
}
startTimer()异步{
t=计时器周期(持续时间(秒:1),(计时器){
设置状态(){
剩余=DateTime.now().差异(startTime);
分钟=剩余的。分钟;
小时=分钟>=60?分钟~/60:0;
天=小时>=24小时~/24:0;
小时数=小时数%24;
分钟=分钟%60;
});
});
}
@凌驾
小部件构建(构建上下文){
返回脚手架(
背景颜色:Colors.white,
正文:中(
子:列(
mainAxisSize:mainAxisSize.min,
儿童:[
填充物(
填充:常数边集全部(8.0),
子项:文本('注册结束',
样式:TextStyle(颜色:Colors.black,字体大小:20),
textAlign:textAlign.center),
),
划船(
mainAxisAlignment:mainAxisAlignment.space,
儿童:[
扩大(
孩子:填充(
填充:常数边集全部(8.0),
子项:文本(“$days”,
样式:TextStyle(颜色:Colors.black,字体大小:20),
textAlign:textAlign.center,),
),
),
扩大(
孩子:填充(
填充:常数边集全部(8.0),
子项:文本(“$hrs”,
样式:TextStyle(颜色:Colors.black,字体大小:20),
textAlign:textAlign.center,),
),
),
扩大(
孩子:填充(
填充:常数边集全部(8.0),
子项:文本(“$mins”,
样式:TextStyle(颜色:Colors.black,字体大小:20),
textAlign:textAlign.center,),
),
),
]),
划船(
mainAxisAlignment:mainAxisAlignment.space,
儿童:[
扩大(
孩子:填充(
填充:常数边集全部(8.0),
子项:文本('天',
样式:TextStyle(颜色:Colors.black,字体大小:16),
textAlign:textAlign.center,),
),
),
扩大(
孩子:填充(
填充:常数边集全部(8.0),
子:文本('Hours',
样式:TextStyle(颜色:Colors.black,字体大小:16),
textAlign:textAlign.center,),
),
),
扩大(
孩子:填充(
填充:常数边集全部(8.0),
子项:文本('分钟',
样式:TextStyle(颜色:Colors.black,字体大小:16),
textAlign:textAlign.center,),
),
),
]),
],
)));
}