我想知道我正在创建像这样的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构造函数中的所有回调都被触发了。
这种行为有解释吗?
干杯!
答案 0 :(得分:3)
您不应添加parens ()
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;
}