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

如何让Flutter的Timer.periodic取消后再执行后续代码?

问题原因

Timer.periodic返回的是Timer实例,而非Future,所以你的await根本不会等待定时器完成逻辑,函数会直接执行到return ('job not done yet.'),之后定时器才会继续运行到counter等于3的逻辑。

解决方案

用Completer来手动控制Future的完成时机,只有当条件满足(counter == 3)时,才完成Future并返回结果。修改后的代码如下:

import 'dart:async';

Future<String> delayTest() async {
  var counter = 0;
  final completer = Completer<String>();
  
  Timer.periodic(const Duration(seconds: 1), (timer) {
    counter++;
    if (counter == 3) {
      print('job done');
      timer.cancel();
      completer.complete('job done'); // 条件满足时完成Future,返回结果
    }
  });
  
  return completer.future; // 返回Completer的Future,等待条件满足
}
关键说明
  • Completer是dart:async库中的工具,用于手动创建和控制Future的生命周期
  • 当counter等于3时,调用completer.complete()传入要返回的字符串,此时delayTest函数的Future才会完成,调用方会收到返回值
  • 必须取消定时器,避免不必要的资源消耗

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 13:43:12