flutter - 有没有办法让 Flutter Timer.periodic 在进入下一个周期之前等待函数返回加上固定的持续时间?

标签 flutter dart timer

我通常使用具有持续时间的 Timer.periodic。这非常适合我当前的用例。

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

void checkChange(Timer timer) async {
   //do some network calls
}

在这种特殊情况下,我进行的网络调用不超过 500 毫秒,并且每 5 秒进行一次就足够了,这取决于这些调用返回的内容。

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

那么有没有一种方法可以让定时器等待一个函数,并且仍然有一个固定的持续时间,比如 1 秒。那么它花费的最长时间是 1 秒 + 回调运行时间?或者有没有更好的方法可以实现这一点,我愿意接受建议。谢谢。

最佳答案

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

关于flutter - 有没有办法让 Flutter Timer.periodic 在进入下一个周期之前等待函数返回加上固定的持续时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59602482/

相关文章:

Flutter ListView搜索并点击

dart - 为什么我不能使用匿名函数返回颜色值?

linux - Dart pub 安装 x86_64 SocketIOException

c# - System.Timers.Timer 仅提供每秒最多 64 帧

c# - 为什么Windows.Forms.Timer的时间间隔随着tick的增加而减少?

java - Java 中的 javascript setTimeout 等价物是什么?

flutter - 如何动态增加列表的高度并在达到最大高度后滚动?

flutter - 如何在 Dart 中的 List.forEach() 中异步/等待

flutter - 将值传递给要在底部工作表中使用的 float 操作按钮

flutter - 你如何在 dart 中使用抽象类进行继承?错误 : superclass SpanishData doesn't have a zero argument constructor