我正在 flutter 中实现一个计时器。这是应用程序的结构。
页面 A(包含一些列表,用户单击这些列表并将其带到计时器页面)。
页面 B 格式,运行计时器。我能够正确运行计时器/秒表,但是当我按页面 B 上的后退按钮时,我会在处理错误后调用 setstate() 。我知道这是预期的行为。
如果我在处置时使用timer.cancel(),我不会收到错误,但计时器将停止运行。即使我导航到页面A或说任何其他新页面(小部件),计时器/秒表也应该继续运行。
我知道使用侦听器和 WidgetBindingObserver 可能可以做到这一点,但我对实现它没有明确的了解。希望我能在这个问题上得到一些帮助。
页面B的构建类:
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
leading: new IconButton(icon: new Icon(Icons.arrow_back), onPressed: ()async{
Navigator.pop(context,widget._elapsedTime);
}),
title: Text("widget.title"),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
'$_elapsedTime'),
RaisedButton(
child: Text('Start'),
onPressed: () {
if(watch.isRunning){
stopWatch();
}
else{
startWatch();
}
},
),
],
),
));
启动观察功能:
startWatch() {
watch.start();
timer = new Timer.periodic(new Duration(milliseconds:1000), updateTime);}
每秒调用一次的更新时间函数:
updateTime(Timer timer) {
if (watch.isRunning) {
print(_elapsedTime);
var time= formatedTime(watch.elapsedMilliseconds);
print("time is"+time);
setState(() {
_elapsedTime = time;
});
}