为什么这个Dart广播流不接受多个监听呼叫

Dan*_*son 5 stream event-listener dart

import 'dart:async';

void main() {
  var dog = new Dog();
  showTheDogACat(dog);
  print('outside');
  dog.bark();
}

class Cat{
  void runAway(msg){
    print("$msg I'm running away!");
  }
}

class Dog{  
  var _barkController = new StreamController();
  Stream get onBark => _barkController.stream.asBroadcastStream();
  void bark(){
    _barkController.add("woof");
  }
}

showTheDogACat(dog){
  var cat = new Cat();
  dog.onBark.listen((event)=>cat.runAway(event));
  dog.onBark.listen((event)=>print(event));       //why Exception: Stream already has subscriber?
  print('inside');
  dog.bark();
}
Run Code Online (Sandbox Code Playgroud)

为什么第二个dog.onBark.listen调用生成异常:流已经有订阅者?我认为广播流可能有很多订阅者?

Flo*_*sch 6

getter 第二次onBark调用.新创建的广播流将尝试绑定到但将失败,因为已经有一个侦听器.asBroadcastStream_barkController.stream_barkController.stream

所以是的:广播流可能有多个侦听器,但asBroadcastStream不能在单个订阅流上多次调用该方法.

一种解决方案是缓存第一个结果asBroadcastStream.