我们在上一章回中介绍了异步操作相关的内容,本章回中将介绍如何把多个异步操作组成事件流。事件流是指让事件按照一定的顺序去执行,我们介绍RxJava时介绍这方
面的内容,感兴趣的看官可以去看看。Flutter提供了Stream类来实现事件流,本章回中将介绍它的使用方法。
Stream类提供了一些静态方法来实现事件操作,常用的是静态方法如下:
_syncMultiLauncher() {
Stream.fromFutures([
Future.delayed(Duration(seconds: 2),()=>debugPrint('do one'),),
// Future.delayed(Duration(seconds: 2),()=>debugPrint('do two'),),
Future.delayed(Duration(seconds: 2),(){throw AssertionError();},),
Future.delayed(Duration(seconds: 2),()=>debugPrint('do three'),),
])
.listen(
(event) {print('onData');},
onDone:() => print('onDone'),
onError: (v) => print('onError'),
);
}
在上面的代码中,使用三个Future异步事件组成了事件流,它的执行顺序按照它们在数组中的索引依次进行,编译并且运行上面的程序可以得到以下运行结果:
I/flutter ( 7402): do one
I/flutter ( 7402): onData
I/flutter ( 7402): onError
I/flutter ( 7402): do three
I/flutter ( 7402): onData
I/flutter ( 7402): onDone
从程序运行结果中可以看到先运行事件流中的第一个事件:do one,listen()方法监听到该事件后运行onData方法;接着运行事件流中的第二个事件,该事件主动抛出
一个错误,listen()方法监听到错误后运行onError方法,注意它不会去运行onData方法;最后运行第三个事件:do three,listen()方法监听到该事件后运行
onData方法,到目前为止,事件流中的三个事件都已经运行结束,此时listen()方法调用onDone方法,表示事件流中的所有事件运行完成。
看官们,关于"Flutter中的事件流"相关的内容就介绍到这里,欢迎大家在评论区交流与讨论!