You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter使用Duration实现倒计时器无法自动计时问题求助

你的代码核心问题有两个:

  • Duration是值类型,你传入countDownTimer的是nextTime的初始值副本,回调函数内部的duration不会随着外部变量变化自动更新
  • 定时器回调里只做了超时判断,没有实现每秒扣除1秒时长、同步更新状态变量的逻辑,所以倒计时不会自动走

修正方案

  1. 调整倒计时函数逻辑,直接操作类的成员变量,每秒更新状态:
Timer? timer;
Duration? nextTime; // 确保是你的类成员变量

void countDownTimer() {
  const oneSec = Duration(seconds: 1);
  // 先清空之前可能存在的定时器,避免重复创建
  timer?.cancel();
  timer = Timer.periodic(
    oneSec,
    (Timer timer) => setState(() {
      if (nextTime?.inSeconds == 0) {
        timer.cancel();
        // 这里可以添加倒计时结束后的触发逻辑
      } else {
        nextTime = nextTime! - oneSec;
        // 页面组件直接绑定nextTime即可自动刷新显示
      }
    }),
  );
}
  1. 修改initState里的调用逻辑:
@override
void initState() {
  super.initState();
  AndroidAlarmManager.initialize();
  getOffsetSign();
  nextTime = nextAlarmTime();
  print("From inside init state: $nextTime");
  countDownTimer();
}
  1. 页面销毁时释放定时器避免内存泄漏:
@override
void dispose() {
  timer?.cancel();
  super.dispose();
}

内容的提问来源于stack exchange,提问作者user14709104

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 16:12:00