1

我想知道我正在创建这样的 StreamController:

class {
  StreamController _controller = 
      new StreamController(onListen: _onListen(), onPause: _onPause(), 
          onResume: _onResume(), onCancel: _onCancel());

    Stream get stream => _controller.stream;
}

在我调用的另一个类中

var sub = myInstance.stream.listen(null);

我真的很惊讶 StreamController 的构造函数中的所有回调都被触发了。

这种行为有解释吗?

干杯!

4

1 回答 1

3

你不应该添加括号()

class {
  StreamController _controller = 
      new StreamController(onListen: _onListen, onPause: _onPause, 
          onResume: _onResume, onCancel: _onCancel);

    Stream get stream => _controller.stream;
}

这样,您作为参数传递给onListen, onPause, ... 的表达式是对方法/函数的引用。添加父母时,表达式是方法/函数调用,onListen, onPause, ... 的实际参数是表达式的返回值。

或者你可以这样(我省略了参数,因为我想节省时间来查找它们)

class {
  StreamController _controller = 
      new StreamController(onListen: () => _onListen(), onPause: () => _onPause(), 
          onResume: () => _onResume(), onCancel: () => _onCancel());

    Stream get stream => _controller.stream;
}
于 2014-11-12T16:56:20.673 回答