Flutter中如何结合Future/await与Timer.periodic实现顺序定时任务
问题修复:让定时器按顺序执行
你的代码问题在于mainTimerStart函数虽然声明为Future<void>,但内部没有等待定时器完成就直接返回了,导致await完全起不到等待作用,所有步骤会同时执行。
修复后的mainTimerStart函数
Future<void> mainTimerStart(int setMainTime) async { isMainTimerRun(true); time(setMainTime); final completer = Completer<void>(); mainTimer = Timer.periodic(const Duration(seconds: 1), (timer) { if (time <= 1) { mainTimer?.cancel(); time(0); isMainTimerRun(false); completer.complete(); // 定时器结束时触发Future完成 } else { time--; } }); return completer.future; // 返回Future,等待定时器结束 }
修复说明
通过Completer手动控制Future的完成时机:只有当倒计时结束、定时器被取消时,才调用completer.complete(),这样await mainTimerStart(2)会真正等待2秒后,再执行后续的print和下一个定时器逻辑,完全符合你期望的步骤顺序。
内容的提问来源于stack exchange,提问作者최수형
相关产品推荐
相关产品推荐

