Dart 计时器和睡眠

219 阅读1分钟

在dart需要使用计时器需要导入包import 'dart:async';,包里面有个Timer

Timer的定义:

abstract class Timer {
  factory Timer(Duration duration, void callback()) {
    if (Zone.current == Zone.root) {
      return Zone.current.createTimer(duration, callback);
    }
    return Zone.current
        .createTimer(duration, Zone.current.bindCallbackGuarded(callback));
  }
  
  factory Timer.periodic(Duration duration, void callback(Timer timer)) {
    if (Zone.current == Zone.root) {
      return Zone.current.createPeriodicTimer(duration, callback);
    }
    var boundCallback = Zone.current.bindUnaryCallbackGuarded<Timer>(callback);
    return Zone.current.createPeriodicTimer(duration, boundCallback);
  }

  static void run(void callback()) {
    new Timer(Duration.zero, callback);
  }

  void cancel();

  int get tick;
  bool get isActive;

  external static Timer _createTimer(Duration duration, void callback());
  external static Timer _createPeriodicTimer(
      Duration duration, void callback(Timer timer));
}

单次计时器

Timer(Duration(milliseconds: 200), () {
  setState(() {
    _turns2 += .2;
  });
});



//JS中的单次计时器
setTimeout(() => {
}, 200);

永久计时器 Timer.periodic()

Timer.periodic(Duration(milliseconds: 200), (timer) {
  if (true) {
    //可以使用timer.cancel()来取消定时器,避免无限回调
    timer.cancel();
  }
});



var Timer = setInterval(() => {
}, 200);
clearInterval(Timer) //取消定时器

Timer.run()

尽快异步运行给定的回调

Timer.run(void Function() callback);


import 'dart:async';

main(List<String> args) {
  Timer.run(methods);
}

void methods() async {
  print("尽快异步运行给定的回调");
}