我想了个遍运行功能,在之间的延迟。 我怎样才能用飞镖做到这一点?
Answer 1:
您可以使用Timer
类调度一次性和重复功能。
重复
这里是你如何运行重复功能:
import 'dart:async';
main() {
const oneSec = const Duration(seconds:1);
new Timer.periodic(oneSec, (Timer t) => print('hi!'));
}
定时器有两个参数,一个持续时间和运行功能。 持续时间必须是一个实例Duration
。 回调必须采用一个参数,定时器本身。
取消重复计时器
使用timer.cancel()
来取消重复的计时器。 这是一个原因,为什么定时器传递给回调运行,从重复的计时器。
延迟一段时间后单次
要延迟一段时间后安排一拍功能(执行一次,在未来的一段时间):
import 'dart:async';
main() {
const twentyMillis = const Duration(milliseconds:20);
new Timer(twentyMillis, () => print('hi!'));
}
请注意,对于单次计时器不带参数的回调。
一次性尽快
您也可以请求函数尽快运行,在未来的至少一个事件循环打勾。
import 'dart:async';
main() {
Timer.run(() => print('hi!'));
}
在HTML
定时器甚至在HTML工作。 事实上, window.setTimeout
被删除,所以计时器是运行在未来功能的唯一途径。
Answer 2:
https://api.dartlang.org/stable/1.24.3/dart-async/Stream/Stream.periodic.html
import 'dart:async';
StreamSubscription periodicSub;
void main() {
periodicSub = new Stream.periodic(const Duration(milliseconds: 500), (v) => v)
.take(10)
.listen((count) => print('tick $count'));
}
或者,如果不只是需要计数器
import 'dart:async';
StreamSubscription periodicSub;
void main() {
periodicSub = new Stream.periodic(const Duration(milliseconds: 500))
.take(10)
.listen((_) => print('tick'));
}
Answer 3:
您还可以使用Future.delayed并等待延迟执行:
Future<Null> delay(int milliseconds) {
return new Future.delayed(new Duration(milliseconds: milliseconds));
}
main() async {
await delay(500);
print('Delayed 500 milliseconds');
}
Answer 4:
替代;
Timer interval(Duration duration, func) {
Timer function() {
Timer timer = new Timer(duration, function);
func(timer);
return timer;
}
return new Timer(duration, function);
}
int i = 0;
interval(new Duration(seconds: 1), (timer) {
print(i++);
if (i > 5) timer.cancel();
});
文章来源: How do I run a reoccurring function, in Dart?