有没有办法让 Flutter 的 Timer.periodic 等待函数返回加上固定的持续时间,然后再进入下一个周期?

Ric*_*ard 5 timer dart flutter

Timer.periodic通常使用一段时间。这非常适合我当前的用例。

Duration fiveSecs = const Duration(seconds: 5);
new Timer.periodic(fiveSecs, checkChange);

void checkChange(Timer timer) async {
   //do some network calls
}
Run Code Online (Sandbox Code Playgroud)

在这种特殊情况下,我进行的网络调用时间不超过 500 毫秒,并且每 5 秒执行一次就足以满足这些调用返回的任何内容。

现在我想检查新值的频率为 2 秒,但是,根据需要检查的内容,网络调用可能需要几百毫秒到甚至 10 秒不等。我可以给计时器留出很大的余量,并使用大约 20 秒的频率,但在这种情况下,如果可能的话,我什至更喜欢 1 秒的频率。

那么有没有一种方法可以让计时器等待一个函数,并且仍然有一个固定的持续时间,比如 1 秒。那么最多需要的时间是1 second + callback runtime?或者有没有更好的方法可以实现这一点,我愿意接受建议。谢谢。

小智 8

void startTimer() {
  Timer.periodic(Duration(seconds: 1), (Timer t) async {
    print("lets wait for 5 seconds");
    t.cancel();
    await Future.delayed(Duration(seconds: 5));
    print("Job is done");
    print(DateTime.now());
    print("Do it again");
    startTimer();
  });
}
Run Code Online (Sandbox Code Playgroud)


Den*_*s G 0

最后checkChange添加Future.delayed(const Duration(seconds: 5), checkChange)然后调用一次而不是运行计时器。如果您需要随时终止它,您可以添加/检查布尔标志。