- 可以通过 await for 循环来读取 stream 的数据,在循环结束时也是stream关闭的时候,反之亦然。
- 在一个stream 方法中,通过 yield 向await for 传递消息
- stream 可以通过 listen 方法来监听
- 通过对函数声明 async* 表示该函数是一个stream,参考代码1
- listen方法会返回 StreamSubscription 对象,可以通过返回的对象设置 onData onDone onError 方法
- StreamSubscription 有 callback 、cencal、pause、resume 方法,可以接收数据、取消监听、暂停监听、恢复监听
- 对于 onDone 方法,如果订阅方主动取消监听,是无法触发的
- Stream 可以单次订阅和广播订阅
- stream 可以通过 transform 方法对数据进行加工,然后再传递给 listen 方法处理, 需要通过 StreamTransformer 创建 transform
- streamController 入口叫做 sink,出口就是 stream
- 可以通过 Stream<T>.periodic 来执行一个循环定时的输出流,参考代码2
- 可以通过 Stream 中的 skip 方法跳过流,通过 where 方法过滤流, 通过 transform 方法转换流
代码1:
Stream s = streamTest();
s.listen((v){
print(v);
});
Stream<int> streamTest() async * {
for(var i = 0;i<=10;i++){
yield i;
}
}
代码2:
Stream x = Stream<String>.periodic(Duration(seconds: 1),timePer);
x.listen((v){
print(v);
});
String timePer(int x) {
// ignore: omit_local_variable_types
x+=1;
return 'run in ${x.toString()} times';
}
学习资料:
1、http://www.flutterj.com/?post=103
2、https://juejin.im/post/5d3a91d1e51d457778117479#heading-18