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

Dart如何实现for循环延迟执行,10秒内从15倒数到5

Dart 逐秒倒数功能实现

问题原因

  • 原有代码的for循环为同步执行逻辑,会一次性创建10个延迟1秒的Future任务,所有任务会在程序启动1秒后同时触发,无法形成逐秒间隔的效果
  • 将i--放入Future.delayed回调导致崩溃的核心原因是:for循环的终止条件判断为同步执行,异步回调中修改循环变量i会导致循环终止条件永远无法命中,触发死循环或变量越界问题。

推荐实现方案(async/await)

该写法逻辑简洁易读,通过await暂停for循环执行,每次等待1秒延迟完成后再进入下一轮循环,刚好10秒即可完成从15到5的倒数:

void main() async {
  var actualCurrent = 5; //Value from DB later
  var delayedCurrent = 15; // Value gets set in programm
  
  for (int i = delayedCurrent; i > actualCurrent; i--) {
    await Future.delayed(const Duration(seconds: 1));
    print('value: $delayedCurrent');
    delayedCurrent--;
  }
}

可选实现方案(递归Future,无需async/await)

如果不方便使用async/await语法,可以通过递归调用的方式实现,每次回调执行完成后再生成下一个延迟任务:

void main() {
  var actualCurrent = 5;
  var delayedCurrent = 15;

  void countdown() {
    if (delayedCurrent <= actualCurrent) return;
    Future.delayed(const Duration(seconds: 1), () {
      print('value: $delayedCurrent');
      delayedCurrent--;
      countdown();
    });
  }
  
  countdown();
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 19:06:01