本教程展示了在dart和flutter编程中用延迟定时器重复执行一个函数的多种方法。
我们有多种方法可以用延迟时间周期性地执行一个代码函数:
- 使用Timer Periodic方法
Timer.Periodic() 方法允许你创建一个定时器。
Timer Timer.periodic(Duration duration, void Function(Timer) callback)
它接受持续时间和回调函数参数。
并且,重复执行持续时间定时器的回调函数。
下面是一个每分钟重复运行一个打印语句的例子
import 'dart:async';
main() {
const oneMinute = Duration(minutes: 1);
Timer.periodic(oneMinute, (Timer t) {
print('Hello Welcome: ' + new DateTime.now().toString());
});
}
输出:
Hello Welcome: 2022-03-30 09:42:52.810
Hello Welcome: 2022-03-30 09:43:52.825
Hello Welcome: 2022-03-30 09:44:52.814
Hello Welcome: 2022-03-30 09:45:52.818
Hello Welcome: 2022-03-30 09:47:26.838
Hello Welcome: 2022-03-30 09:48:26.815
Hello Welcome: 2022-03-30 09:49:26.814
Hello Welcome: 2022-03-30 09:50:26.840
Hello Welcome: 2022-03-30 09:51:26.823
Hello Welcome: 2022-03-30 09:52:26.810
Hello Welcome: 2022-03-30 09:53:26.830
Hello Welcome: 2022-03-30 09:54:26.847
-
使用StreamSubscription周期类 StreamSubscription类提供了对Stream类的事件订阅。
-
使用Stream.periodic()方法创建一个流
-
它创建了一个Stream,在一个持续时间段内重复地发射事件,对象配置为
Stream Stream.periodic(Duration period, [dynamic Function(int)? computation])
take(n)方法在Stream对象上允许执行n次的计数。listen()事件捕获发射的事件并执行函数。箭头函数被用来执行。
import 'dart:async';
main() {
StreamSubscription streamSubscription;
const oneSecond = Duration(seconds: 1);
streamSubscription = new Stream.periodic(oneSecond)
.take(5)
.listen((_) => print('Hello Welcome: ' + new DateTime.now().toString()));
}
输出:
Hello Welcome: 2022-03-30 10:29:29.211
Hello Welcome: 2022-03-30 10:29:30.209
Hello Welcome: 2022-03-30 10:29:31.209
Hello Welcome: 2022-03-30 10:29:32.209
Hello Welcome: 2022-03-30 10:29:33.813
与Timer.Periodic相比,这种方法有更多的优点:
- 第一次执行立即运行
- 回调执行次数可以被配置并限制在n次。
总结
综上所述,我们可以使用Timer和Stream周期性方法来重复执行函数,并配置持续时间。