在这个 StreamDemoHome 的 State 类里面 .. 先给它添加一个 initState .. 表示初始化的数据 .. override 一下它继承的类里面的这个方法 ..
创建 Stream 有很多方法 .. 先创建一个 Stream .. 这个 Stream 上的数据的类型是 String,就是一些字符串类型的数据 .. stream 的名字叫 _streamDemo .. 创建这个 Stream,用一下 Stream 的 fromFuture ,根据一个 Future 创建一个 Stream ..
dart 里面的 Future,有就点像是 JavaScript 里的 Promise .. 这个 Future 我们用一个方法返回 .. 名字叫 fetchData ..
需要在这个文件里面导入一个包 .. dart:async ..
比如去请求一个外部的服务接口,一般可以先返回一个 Future ,然后等从接口那里得到数据以后,这个 Future 上面的数据就是从接口那里获取到的数据 .. 如果请求出现了错误, 在这个 Future 上就会带着一个错误 ...
下面我们可以再去定义这个 fetchData 方法 .. 它返回的是一个 Future ,数据的类型是 String .. 方法的名字叫 fetchData .. 把这个方法标记成一个 async 方法 ...
在方法里面,我们可以模拟一下异步的动作 .. 用一个 await .. 执行一下 Future.delayed .. 延迟的时间是 Duration ... seconds 是 3 ..
这行代码的意思就是,在这里要延迟 3 秒钟 .. 过了三秒以后 .. 我们可以 return 一个字符串 .. 内容是 hello ~ ..
现在我们就创建了一个 Stream .. 这个 Stream 是根据一个 Future 生成的 .. 这里就是在 3 秒钟以后 .. 会在 这个 Stream 上出现一个数据,这个数据的类型是一个字符串,具体的数据就是这个 hello ...
listen
要使用在 Stream 上面出现的数据,我们得去监听一下这个 Stream .. 就是等这个 Stream 上有数据的时候,我们可以决定怎么样去使用这些数据 ..
这里用一下创建的这个 _streamDemo ,用一下 stream 上的 listen 这个方法 ... 我们可以给这个方法提供三个处理器, 设置一下当 Stream 上有数据,有错误,还有完成的时候要做的一些事情 ..
这个 Listen 方法的作用就是在 Stream 上添加一个 Subscription .. 方法返回的东西是一个 StreamSubscription ..
我们先设置一下它的 onData 处理器 .. 就是设置一下当 Stream 上有数据的时候要做的事情 .. 可以单独设置一下方法 .. 名字暂时可以叫它 onData .. 找个地方再去定义一下这个方法 .. void .. onData .. 方法接收一个 String 类型的参数 .. 参数的名字可以是 data .. 现在这个方法的这个 data 参数表示的就是 _streamDemo 这个 stream 出来的数据 ..
可以把它输出到控制台上 .. print ... $data ..
为了更清楚一些,我们在控制台上再添加点文字 .. 创建 stream 之前,输出一个 Create a stream . 监听这个 stream 的时候,再输出一个 Start listening on a stream ... 下面再输出一个 Initialize completed.
然后打开调试控制台 ..
再打开命令面板 ... 执行一下 Hot restart ...
你会发现,在控制台上会输出 ... Create a stream ... 然后监听这个 Stream ... 初始化完成 ... 最终 Stream 上会出现一个数据 ... 我们监听了这个 Stream,得到在 Stream 上出来的数据以后,要做的事情就是把它输出到控制台上 .. 所以这里又会输出一个 hello ~ ... 因为它就是在我们创建的 Stream 上面出来的一个数据 ...
注意控制台输出的这些字符串的顺序 .. 创建并且监听了 Stream 以后 .. 显示一个初始化完成 .. 过了一会儿才输出了这个 hello ~ ,因为监听 Stream 的时候,这个 Stream 上面还没有数据 ..