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

Flutter中circular_countdown_timer动态修改倒计时时长问题

问题:结合GetX动态修改Circular CountDown Timer的倒计时时长

需求

使用circular_countdown_timer包与GetX实现一个倒计时器,要求:

  • 启动倒计时前可修改时长
  • 重置倒计时后可重新选择新时长

当前实现代码

倒计时组件声明

Obx(() => CircularCountDownTimer(
  duration: pc.workTime.value.inSeconds,
  controller: pc.timerController,
  isReverse: true,
  autoStart: false
))

时长选择器(NumberPicker)

NumberPicker(
    value: pc.workTime.value.inMinutes,
    minValue: 0,
    maxValue: 100,
    onChanged: (value) {
      pc.workTime.value = Duration(minutes: value); // 更新可观察变量
    }),

GetXController中的控制器声明

class YourController extends GetxController {
  final Rx<Duration> workTime = Duration(minutes: 25).obs;
  CountDownController timerController = CountDownController();
}

遇到的问题

以初始时长25分钟改为35分钟为例:

  • 修改时长后,倒计时器的文本显示正确更新为35分钟
  • 点击启动后,倒计时仍从25分钟开始计时

解决方案

问题根源在于CountDownController会在初始化时缓存初始的duration值,仅更新组件的duration参数不会同步到控制器内部。需要在workTime变化时主动更新控制器的时长:

方案1:在NumberPicker的回调中直接更新控制器

修改时长选择器的逻辑,更新workTime后调用控制器的restart方法传入新时长:

NumberPicker(
    value: pc.workTime.value.inMinutes,
    minValue: 0,
    maxValue: 100,
    onChanged: (value) {
      pc.workTime.value = Duration(minutes: value);
      // 重置控制器到新时长
      pc.timerController.restart(duration: pc.workTime.value.inSeconds);
    }),

方案2:在GetXController中监听workTime变化(更优雅)

在控制器的onInit方法中添加对workTime的监听,自动同步时长到倒计时控制器:

class YourController extends GetxController {
  final Rx<Duration> workTime = Duration(minutes: 25).obs;
  CountDownController timerController = CountDownController();

  @override
  void onInit() {
    super.onInit();
    // 监听workTime变化,自动更新倒计时控制器
    ever(workTime, (newDuration) {
      timerController.restart(duration: newDuration.inSeconds);
    });
  }
}

补充说明

  • restart方法会重置倒计时到指定的新时长,并保持停止状态(匹配我们设置的autoStart: false),符合“启动前修改”的需求
  • 如果需要在倒计时运行中修改时长,可先调用timerController.pause(),再执行restart操作

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 17:25:27