You need to enable JavaScript to run this app. Flutter中如何最简单实现每隔1分钟发起一次定时http.get请求
优惠活动
大模型
产品
解决方案
定价
更多

Flutter中如何最简单实现每隔1分钟发起一次定时http.get请求

报错的核心原因是 Timer.periodic 的回调函数本身默认没有被标记为 async,即使外层函数是async类型,回调属于独立的执行上下文,因此无法直接使用await关键字。

基础修复方案

只需要给回调函数加上async修饰即可:

Timer.periodic(const Duration(minutes: 1), (timer) async {
  response = await http.get(url);
  // 后续处理响应的逻辑
});

可选优化方案

上述实现会严格按照1分钟的间隔触发请求,即使上一次请求还未执行完成,可能会出现请求堆叠的情况。如果你需要保证两次请求的间隔是上一次请求完成后再等1分钟,推荐使用递归循环+Future.delayed的实现:

bool _enablePeriodicRequest = true;

Future<void> startRequestTask() async {
  while(_enablePeriodicRequest) {
    response = await http.get(url);
    // 处理响应逻辑
    await Future.delayed(const Duration(minutes: 1));
  }
}

// 在外层async函数中启动任务
startRequestTask();

// 需要停止任务时修改标记即可
// _enablePeriodicRequest = false;

补充说明

  • 如果使用Timer.periodic实现,需要停止定时任务时调用timer.cancel()即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 02:15:11