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
调用生成异常:流已经有订阅者?我认为广播流可能有很多订阅者?
getter 第二次onBark
调用.新创建的广播流将尝试绑定到但将失败,因为已经有一个侦听器.asBroadcastStream
_barkController.stream
_barkController.stream
所以是的:广播流可能有多个侦听器,但asBroadcastStream
不能在单个订阅流上多次调用该方法.
一种解决方案是缓存第一个结果asBroadcastStream
.
归档时间: |
|
查看次数: |
827 次 |
最近记录: |