本教程解决了以下问题:
- 如何在Flutter中延迟运行代码?
- 在dart中对代码进行特定时间的睡眠?
有时您想在一定时间内sleep 或delay 代码的执行。
在dart中,您可以通过多种方式实现。代码的执行可以用异步和同步的方式来延迟 在异步代码执行中,你可以使用Future.delayed ,Stream periodic 或Timer 类 在同步执行中,你可以使用Sleep 方法来顺序执行。
Dart睡眠或延迟代码运行的例子
我们有多种方法可以做到
- 以同步的方式延迟代码的执行 这个程序使用了睡眠方法。
dart:io package方法提供了一个睡眠方法,它可以在持续时间对象中睡眠线程执行。
void sleep(Duration duration)
一个持续时间是一个用分钟、小时、秒、毫秒和微秒创建的对象。
下面的程序将当前的执行暂停1分钟,并依次执行下一行。
import 'dart:io';
void main() {
print(DateTime.now());
sleep(new Duration(minutes: 1));
print(DateTime.now());
}
输出:
2022-04-06 21:37:32.260829
2022-04-06 21:38:32.287419
这种方法是顺序和同步工作的,因为它阻止了当前线程的执行。
-
异步延迟执行
我们可以通过多种方式来实现。一种方式是使用
Future. delayed方法dart: async包为异步执行提供一个Future延迟方法。
它不会阻止当前线程的执行,而是在一个单独的线程中执行指定的代码。
import 'dart:async';
void main() {
print(DateTime.now());
Future.delayed(const Duration(minutes: 1));
print(DateTime.now()); .
}
输出:
2022-04-06 21:44:34.659913
2022-04-06 21:44:34.675738
第二种方式是使用内置的Timer类,使用Duration对象创建的Timer对象,对时间段进行计时。 下面是一个示例程序
import 'dart:async';
void main() {
print(DateTime.now());
new Timer(const Duration(seconds: 1), () => print("Executes after 1 second"));
print(DateTime.now());
}
2022-04-06 21:49:38.827591
2022-04-06 21:49:38.850148
Executes after 1 second
第三种方法是使用Stream periodic async 创建一个具有周期性的流,并在异步执行中只执行3次流。
import 'dart:async';
void main() {
print(DateTime.now());
Stream<int> intStream =
Stream<int>.periodic(const Duration(seconds: 1), (i) => i + 1);
intStream = intStream.take(3);
intStream.listen((event) {
print("executes ${event} times");
});
print(DateTime.now());
}
2022-04-06 21:57:23.059876
2022-04-06 21:57:23.079258
executes 1 times
executes 2 times
executes 3 times
总结
基于同步和异步的延迟,你可以使用其中一种方法。