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

Flutter CountdownTimer 打开页面即自动启动问题修复

异常原因
  • CountdownTimerController 构造函数的autoStart参数默认值为true,你在initState中初始化控制器时没有手动关闭该配置,控制器实例创建完成后会自动启动计时,无需手动调用start()。
  • 控制器初始化阶段就传入了提前计算好的有效endTime,CountdownTimer组件渲染时绑定了已自动启动的控制器,页面加载完成后会直接运行倒计时,完全绕过按钮点击的触发逻辑。
  • CountdownTimer组件上重复传入endTime和onEnd回调,和控制器的配置产生冲突,会干扰计时启动的控制逻辑。
修改方案
  1. 初始化CountdownTimerController时显式设置autoStart: false,初始状态传入无效的endTime(比如0),避免控制器初始化后自动运行。
  2. 将endTime的计算逻辑移到按钮点击回调中,点击触发时再基于当前时间计算目标结束时间,更新到控制器后再调用start()启动计时。
  3. CountdownTimer组件仅保留controller绑定即可,移除重复传入的endTime、onEnd参数,所有计时状态、回调统一由控制器管理。

修改后的可运行代码示例:

// 按需修改计时总时长,示例为1小时
const int miningTotalDuration = 60 * 60 * 1000;
late final CountdownTimerController _controller;
int? savedEndTime;

@override
void initState() {
  super.initState();
  _controller = CountdownTimerController(
    endTime: 0,
    autoStart: false,
    onEnd: onEnd,
  );

  // 如果需要支持APP重启后恢复未完成的计时,可在这里读取本地存储的endTime判断
  // 若读取到的savedEndTime大于当前时间戳,直接赋值给_controller.endTime后调用start()即可
}

@override
void dispose() {
  _controller.dispose();
  super.dispose();
}

void miningCounter() {
  // 点击时才计算真实结束时间:当前时间戳 + 计时总时长
  savedEndTime = DateTime.now().millisecondsSinceEpoch + miningTotalDuration;
  _controller.endTime = savedEndTime;
  _controller.start();

  final user = context.read<FirebaseAuthMethods>().user;
  dbRef.child(user.uid).child('miningEndTime').set(savedEndTime);
}

@override
Widget build(BuildContext context) {
  return Scaffold(
    appBar: AppBar(
      title: const Text('Mining Screen'),
      backgroundColor: primaryMaterialColor,
    ),
    body: Column(
      crossAxisAlignment: CrossAxisAlignment.center,
      mainAxisAlignment: MainAxisAlignment.center,
      children: [
        CustomMiningButton(icon: Icons.add, onTap: miningCounter),
        CountdownTimer(
          controller: _controller,
        )
      ],
    ),
  );
}

如果需要实现点击按钮前隐藏倒计时组件,只需要加一个状态位判断,比如bool isMining = false,点击按钮时将该状态设为true,用Visibility或者if判断渲染CountdownTimer即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 04:36:16