Dart Stream

184 阅读1分钟
import 'dart:async';

main(List<String> args) async {
  DataBloc().init();
}

class DataBloc {
  ///定义一个Controller
  ///broadcast() 可以接收多个listener
  StreamController<List<String>> _dataController =
      StreamController<List<String>>.broadcast();

  ///获取 StreamSink 做 add 入口
  StreamSink<List<String>> get _dataSink => _dataController.sink;

  ///获取 Stream 用于监听
  Stream<List<String>> get _dataStream => _dataController.stream;

  ///事件订阅对象
  StreamSubscription _dataSubscription;
  StreamSubscription _dataSubscription2;

  init() {
    ///监听事件
    _dataSubscription = _dataStream.listen((value) {
      ///do change
      print(value);
    });

    _dataSubscription2 = _dataStream.listen((value) {
      ///do change
      print(value);
    });

    ///发送事件
    _dataSink.add(["first", "second", "three", "more"]);
  }

  close() {
    ///关闭
    _dataSubscription.cancel();
    _dataSubscription2.cancel();
    _dataController.close();
  }
}