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
相关产品推荐
相关产品推荐

