如何通过一个回调函数到StreamController(How to pass a callback

2019-10-21 06:26发布

我想知道什么我创建一个这样的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的构造所有的回调被触发。

是否有此行为的解释?

干杯!

Answer 1:

你不应该加括号()

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

    Stream get stream => _controller.stream;
}

通过这种方式表达你传递作为参数来onListenonPause ,......是一个方法/函数的引用。 当您添加的父母表达的是一个方法/函数调用,实际参数onListenonPause ......是表达式的返回值。

另外,您可以把它这样(我被省略参数,因为我想节省时间looke起来)

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

    Stream get stream => _controller.stream;
}


文章来源: How to pass a callback function to a StreamController