相关疑难解决方法(0)

asBroadcastStream 不能被多次调用

在m4更新之后,StreamController.broadcast()被删除,我发现asBroadcastStream不能被多次调用。这意味着您必须存储流(如 Ugly 类中那样),而不是仅使用 getter(如 Pretty 类中那样)。

这是设计使然,还是我做错了?

void main() {
  Pretty p = new Pretty();

  //This does not work.
  p.onChange.listen((n) => print(n));
  //This second call throws: "Bad state: Stream already has subscriber". Why?
  p.onChange.listen((n) => print(n));

  //This does work.
  Ugly u = new Ugly();
  u.onChange.listen((n) => print(n));
  u.onChange.listen((n) => print(n));
}

class Pretty{
  StreamController<int> _streamCtrl = new StreamController<int>();
  Stream<int> get onChange => _streamCtrl.stream.asBroadcastStream();
}

class Ugly{
  StreamController<int> _streamCtrl = new StreamController<int>();
  Stream<int> _onChange;
  Stream<int> get onChange => _onChange;

  Ugly(){
    _onChange …
Run Code Online (Sandbox Code Playgroud)

dart

5
推荐指数
1
解决办法
1081
查看次数

标签 统计

dart ×1