我正在尝试构建一个倒计时小部件 . 目前,我得到了结构工作 . 我只与倒计时本身斗争 . 我使用倒计时插件尝试了这种方法:
class _Countdown extends State<Countdown> {
int val = 3;
void countdown(){
CountDown cd = new CountDown(new Duration(seconds: 4));
cd.stream.listen((Duration d) {
setState((){
val = d.inSeconds;
});
});
}
@override
build(BuildContext context){
countdown();
return new Scaffold(
body: new Container(
child: new Center(
child: new Text(val.toString(), style: new TextStyle(fontSize: 150.0)),
),
),
);
}
}
然而, Value 变化非常奇怪而且根本不光滑 . 它开始抽搐 . 任何其他方法或修复?
4 回答
应该从
State
对象的initState()
方法调用countdown()
方法 .来自Flutter docs的
initState()
的描述:这是一个完整的工作示例:
听起来您正在尝试显示随时间变化的动画文本小部件 . 我会使用带有StepTween的AnimatedWidget来确保倒计时仅显示整数值 .
使用流的倒计时示例,不使用
setState(...)
因此它的所有无状态 .借用例子flutter_stream_friends
与有状态的区别在于重新加载应用程序将重新开始计数 . 使用有状态时,在某些情况下,重新加载时可能无法重新启动 .
基于@ raju-bitter的答案,替代在倒计时流上使用async / await