获取验证码后,进入后台,过段时间进入前台,倒计时时间对不上。
倒计时是通过 Timer
控制的,在 iOS 上,进入后台大约 30 秒后,Timer
的 callback
就不回调了。
伪代码如下:
int _restCount = 60;
_timer = Timer.periodic(const Duration(seconds: 1), (timer) {
setState(() {
_restCount--;
});
});
类似这样的代码肯定会出问题的:进入后台,callback
停止后,_restCount
的值也不变了。再次进入前台,callback
继续回调,_restCount
的值才改变。
记录进入后台与进入前台的时间,根据时间差做处理。
可以,但麻烦,且没必要,因为有方案 2。
Timer
有个属性: tick
。
即使 callback
停止回调了,tick
也是在一直在累加的。
利用这个 tick
,只需改一行代码就可以解决此问题:
int _restCount = 60;
_timer = Timer.periodic(const Duration(seconds: 1), (timer) {
setState(() {
_restCount = 60 - timer.tick;
});
});