flutter StreamController原理

StreamController.png

主要概念

  • sink:_StreamController中sink为_StreamSinkWrapper,_StreamSinkWrapper只是对_StreamController做一下包装
class _StreamSinkWrapper implements StreamSink {
  final StreamController _target;
  _StreamSinkWrapper(this._target);
  void add(T data) {
    _target.add(data);
  }

  void addError(Object error, [StackTrace? stackTrace]) {
    _target.addError(error, stackTrace);
  }

  Future close() => _target.close();

  Future addStream(Stream source) => _target.addStream(source);

  Future get done => _target.done;
}
  • stream : 提供listen接口,StreamSubscription的实际创建为stream调用StreamController的方法创建的

  • 同步、异步:主要区别在于Streamcontroller._sendData方法中是调用了_subscription的_add方法还是_addPending(异步 microtask)方法
    sink.add -> Streamcontroller.add->Streamcontroller._sendData->_subscription._add或_subscription._addPending(异步microtask)

  • 单订阅、广播流:主要区别如下

  • 在StreamController的_subscribe方法中,单订阅流_subscribe只能创建一次StreamSubscription,再次创建会报错。广播流的StreamController的_subscribe方法可以多次执行,并将创建的StreamSubscription以链表形式存储
  • StreamController的_sendData方法中会遍历StreamSubscription执行_sendData或者_addPending方法

你可能感兴趣的:(flutter StreamController原理)