【flutter Timer 60秒倒计时app切到后台隔一段时间再切回前台倒计时秒数不准问题】
·
Timer? _timer; //倒计时的计时器
int _count = 60; //初始倒计时时间
//剩余秒数
late int _remainingSeconds;
//切到后台时的当前时间
DateTime? _backgroundTime;
void didChangeAppLifecycleState(AppLifecycleState state) {
// 切到后台倒计时会被暂停
super.didChangeAppLifecycleState(state);
if (state == AppLifecycleState.paused) {
_backgroundTime = DateTime.now();
} else if (state == AppLifecycleState.resumed && _backgroundTime != null) {
//切回前台计算时间差,用剩余秒数减去
final diff = DateTime.now().difference(_backgroundTime!).inSeconds;
setState(() => _remainingSeconds = max(0, _remainingSeconds - diff));
}
}
//倒计时活动
_timerAction(){
_timer = new Timer.periodic(Duration(seconds: 1), (Timer timer) {
if (mounted) {
final calculated = _count - timer.tick;
setState(() => _remainingSeconds = calculated > 0 ? calculated : 0);
if (_remainingSeconds <= 0) {
timer.cancel();
_buttonText = S.current.fasongyanzhengma; //重置按钮文本
}else{
_buttonText = '${_remainingSeconds}S'; //更新文本内容
}
}
});
}
更多推荐
所有评论(0)