如何将回调函数传递给StreamController

时间:2014-11-12 16:53:32

标签: dart dart-async

我想知道我正在创建像这样的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构造函数中的所有回调都被触发了。

这种行为有解释吗?

干杯!

1 个答案:

答案 0 :(得分:3)

您不应添加parens ()

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

    Stream get stream => _controller.stream;
}

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

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

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

    Stream get stream => _controller.stream;
}