Set*_*add 66
您可以使用Timer
该类来安排一次性和重复功能.
以下是运行重复函数的方法:
import 'dart:async';
main() {
const oneSec = const Duration(seconds:1);
new Timer.periodic(oneSec, (Timer t) => print('hi!'));
}
Run Code Online (Sandbox Code Playgroud)
Timer有两个参数,一个持续时间和一个要运行的函数.持续时间必须是.的实例Duration
.回调必须采用一个参数,即定时器本身.
使用timer.cancel()
取消重复的计时器.这是计时器从重复计时器传递到回调运行的一个原因.
在延迟之后安排一次性功能(执行一次,将来某个时间):
import 'dart:async';
main() {
const twentyMillis = const Duration(milliseconds:20);
new Timer(twentyMillis, () => print('hi!'));
}
Run Code Online (Sandbox Code Playgroud)
请注意,一次性计时器的回调不带参数.
您还可以请求尽快运行函数,将来至少会有一个事件循环.
import 'dart:async';
main() {
Timer.run(() => print('hi!'));
}
Run Code Online (Sandbox Code Playgroud)
计时器甚至可以用HTML工作.事实上,window.setTimeout
被删除了,所以Timer是将来运行某个功能的唯一方法.
Raf*_*zan 24
5 秒定时器示例
bool isStopped = false; //global
sec5Timer() {
Timer.periodic(Duration(seconds: 5), (timer) {
if (isStopped) {
timer.cancel();
}
print("Dekhi 5 sec por por kisu hy ni :/");
});
}
Run Code Online (Sandbox Code Playgroud)
从任何函数调用
sec5Timer();
Run Code Online (Sandbox Code Playgroud)
停止任何功能
isStopped = true;
Run Code Online (Sandbox Code Playgroud)
要处理,您可以使用此代码或技术。
@override
void initState() {
_timer = new Timer.periodic(widget.refreshRate,
(Timer timer) => _updateDisplayTime(inheritedWidget));
super.initState();
}
@override
void dispose() {
_timer.cancel();
super.dispose();
}
Run Code Online (Sandbox Code Playgroud)
您还可以使用 Future.delayed 和 await 来延迟执行:
Future<Null> delay(int milliseconds) {
return new Future.delayed(new Duration(milliseconds: milliseconds));
}
main() async {
await delay(500);
print('Delayed 500 milliseconds');
}
Run Code Online (Sandbox Code Playgroud)
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'));
}
Run Code Online (Sandbox Code Playgroud)
或者如果不需要计数器
import 'dart:async';
StreamSubscription periodicSub;
void main() {
periodicSub = new Stream.periodic(const Duration(milliseconds: 500))
.take(10)
.listen((_) => print('tick'));
}
Run Code Online (Sandbox Code Playgroud)