Flutter 开发实战

235课时
1K学过
8分

课程评价 (0)

请对课程作出评价:
0/300

学员评价

暂无精选评价
1分钟

07 广播和非广播

Stream 中又非为广播和非广播模式,如果是广播模式中,StreamControlle 的实现是由如下所示实现的,他们的基础关系如下图所示:

  • _SyncBroadcastStreamController
  • _AsyncBroadcastStreamController

i

广播和非广播的区别在于调用 _createSubscription 时,内部对接口类 _StreamControllerLifecycle 的实现,同时它们的差异在于:

  • _StreamController 里判断了如果 Stream_isInitialState 的,也就是订阅过的,就直接报错 "Stream has already been listened to." ,只有未订阅的才创建 StreamSubscription
  • _BroadcastStreamController 中,_isInitialState 的判断被去掉了,取而代之的是 isClosed 判断,并且在广播中, _sendData 是一个 forEach 执行:
  _forEachListener((_BufferingStreamSubscription<T> subscription) {
      subscription._add(data);
    });