Stream 异步学习

  1. 可以通过 await for 循环来读取 stream 的数据,在循环结束时也是stream关闭的时候,反之亦然。
  2. 在一个stream 方法中,通过 yield 向await for 传递消息
  3. stream 可以通过 listen 方法来监听
  4. 通过对函数声明 async* 表示该函数是一个stream,参考代码1
  5. listen方法会返回 StreamSubscription 对象,可以通过返回的对象设置 onData onDone onError 方法
  6. StreamSubscription 有 callback 、cencal、pause、resume 方法,可以接收数据、取消监听、暂停监听、恢复监听
  7. 对于 onDone 方法,如果订阅方主动取消监听,是无法触发的
  8. Stream 可以单次订阅和广播订阅
  9. stream 可以通过 transform 方法对数据进行加工,然后再传递给 listen 方法处理, 需要通过 StreamTransformer 创建 transform
  10. streamController 入口叫做 sink,出口就是 stream
  11. 可以通过 Stream<T>.periodic 来执行一个循环定时的输出流,参考代码2
  12. 可以通过 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

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页