第七十八回:Flutter中的事件流

本文介绍了Flutter中的事件流概念,通过Stream类实现异步操作的组合,重点讲解了fromFutures和listen方法,以及onData、onError和onDone这三个监听事件状态的方法。示例代码展示了事件流的执行顺序和错误处理。
摘要由CSDN通过智能技术生成


我们在上一章回中介绍了Flutter中的异步操作,本章回中将介绍 Flutter中的事件流.闲话休提,让我们一起Talk Flutter吧。

概念介绍

我们在上一章回中介绍了异步操作相关的内容,本章回中将介绍如何把多个异步操作组成事件流。事件流是指让事件按照一定的顺序去执行,我们介绍RxJava时介绍这方面的内容,感兴趣的看官可以去看看。Flutter提供了Stream类来实现事件流,本章回中将介绍它的使用方法。

使用方法

Stream类提供了一些静态方法来实现事件操作,常用的是静态方法如下:

  • fromFutures方法:从Future数组中获取异步操作来组成事件流;事件的顺序按照数组的索引值依次进行;
  • listen方法:从事件流中获取事件的运行状态,比如运行错误,运行完成;

我们重点介绍listen方法,该方法以监听的方式运行,它提供了三个方法类型的参数来监听事件的运行状态,详细如下:

  • onData方法:每个事件运行完成后都会执行该方法,该方法是必选方法;
  • onError方法:如果事件流中的某个事件运行时发生了错误,那么回调该方法;
  • onDone方法:所有事件运行完成后回调该方法,表示事件流运行结束;

这三个方法中只有第一个方法是必选方法,最后两个方法是可选方法,不过我还是建议大家把这三个方法都用起来,特别是事件流中有错误发生可以获取到错误信息。

如果大家熟悉RxJava的话就地发现Stream的运行机制和RxJava的运行机制基本相同,不熟悉的话,也不用担心,这种机制就是典型的观察者模式:fromFuture方法对应的数组就是被观察者,或者说事件流就是被观察者,而listen方法就是观察者。

示例代码

_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中的事件流"相关的内容就介绍到这里,欢迎大家在评论区交流与讨论!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

talk_8

真诚赞赏,手有余香

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值