
获取验证码后,进入后台,过段时间进入前台,倒计时时间对不上。
倒计时是通过 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;
});
});