Dart Steam

Dart steam

sink
Stream Controller
Stream
listener
  • Stream Controller : 创建流,对流进行操作
  • Skin:Stream Controller的入口,使用Add添加数据
  • Stream:Stream Controller的出口
  • listener:对Stream进行监听
  • 顺序:先入先出

获得Stream的方式

1、 通过构造函数

stream有三种构造方法

  • Stream.fromFuture:从Future创建新的单订阅流,当future完成时将触发一个data或者error,然后使用Down事件关闭这个流;
Future<String> getData() async {
  await Future.delayed(Duration(seconds: 3));
  return '当前时间为:${DateTime.now()}';
}

_streamFromFuture() {
  Stream.fromFuture(getData())
      .listen((event) => print('Stream.fromFuture -> $event'))
      .onDone(() => print('Stream.fromFuture -> done 结束'));
}

输出

Stream.fromFuture -> 当前时间为:2021-03-22 11:56:53.720638
Stream.fromFuture -> down 结束
  • Stream.fromFutures:从一组Future创建一个单订阅流,每个future都有自己的data或者error事件,当整个Futures完成后,流将会关闭。如果Futures为空,流将会立刻关闭;
Stream.fromFutures([
    Future.delayed(Duration(seconds: 1), () {
      return "Hello";
    }),
    Future.delayed(Duration(seconds: 2),(){
      return "World";
    }),
    Future.delayed(Duration(seconds: 3),(){
      throw AssertionError("Error");
    }),
    Future.delayed(Duration(seconds: 3), () {
      return "野猿新一";
    })
  ]).listen((data){
    print(data); // 每当一个异步任务成功执行完会回调一次
  }, onError: (e){
    print(e.message); // 每当一个异步任务发生异常会回调一次
  },onDone: (){
    print("onDone"); // 虽有异步任务都结束时回调
  })

执行结果如下

Hello
World
Error
野猿新一
onDone
  • Stream.fromIterable:创建从一个集合中获取其数据的单订阅流。
    	Stream.fromIntreable([1,2,3]);
    

2、使用StreamController

//任意类型的流
StreamController controller = StreamController;
controller.sink.add(123);
controller.sink.add('xyz');
controller.sink.add(anything);
//创建一条处理int类型的流
StreamController<int> numController = StreamController();
numController.sink.add(123);

3、 IO Stream

参考1
参考2
参考3

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值