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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值