资源说明:深入理解 Dart 的 Stream
Dart 的 Stream 是一个非常有用的工具,用于处理异步事件。它能够帮助应用处理诸如请求网络、用户交互等问题。在这里,我们将深入了解 Dart 的 Stream,了解它的概念、特点和使用方法。
什么是 Stream
Stream 是一个非常有特点的工具,但却不太好理解。我们可以把它看作一个工厂或者机器。这个机器有一个入口,可以放东西或指令;它不知道入口什么时候会放东西进来;中间的机器能够生产或加工,这应该会耗费一些时间;它有一个出口,应该会有产品从那出来。整个过程都是以异步的眼光来看的。
StreamController
StreamController 是创建流的一种方式。它有一个入口,叫做 sink,可以使用 add 方法放东西进来,放进去以后就不再关心了。StreamController 也有一个出口,叫做 stream,机器处理完毕后就会把产品从出口丢出来,但是我们并不知道什么时候会出来,所以我们需要使用 listen 方法一直监听这个出口。
如何使用 Stream
使用 Stream 的方法有多种,包括:
* 通过构造函数
* 使用 StreamController
* IO Stream
Stream 有三个构造方法:
* Stream.fromFuture:从 Future 创建新的单订阅流,当 future 完成时将触发一个 data 或者 error,然后使用 Down 事件关闭这个流。
* Stream.fromFutures:从一组 Future 创建一个单订阅流,每个 future 都有自己的 data 或者 error 事件,当整个 Futures 完成后,流将会关闭。如果 Futures 为空,流将会立刻关闭。
* Stream.fromIterable:创建从一个集合中获取其数据的单订阅流。
监听 Stream
监听一个流最常见的方法就是 listen。当有事件发出时,流将会通知 listener。Listen 方法提供了这几种触发事件:
* onData:收到数据时触发
* onError:收到 Error 时触发
* onDone:结束时触发
* unsubscribeOnError:遇到第一个 Error 时是否取消订阅,默认为 false
Transforming an existing stream
如果你已经有了一个流,你可以通过它转化成为一条新的流。流提供了 map()、where()、expand()、和 take() 方法,能够轻松将已有的流转化为新的流。
* where 如果你想要筛选掉一些不想要的事件。例如一个猜数游戏,用户可以输入数字,当输入正确的时候,我们做出一定反应。而我们必须筛选掉所有错误的答案,这个时候我们可以使用 where 筛选掉不需要的数字。
* take 如果你想要控制这个流最多能传多少个东西。比如一个聊天应用,你可以使用 take 方法来控制聊天记录的数量。
Stream 是一个非常有用的工具,能够帮助我们处理异步事件。通过了解 Stream 的概念、特点和使用方法,我们可以更好地使用它来开发出色的应用程序。
本源码包内暂不包含可直接显示的源代码文件,请下载源码包。