Dart语法杀死了我-> VoidCallback

时间:2019-06-22 11:56:57

标签: flutter dart

我使用一些代码,无法理解这种语法原理: 示例:

SomeClass someClass = new SomeClass();

class SomeClass{
  VoidCallback _callback;

  set onCallback(VoidCallback callback){
      _callback = callback;
  }

  someFunction(){
    if(_callback != null){
      _callback();
    }
  }
}

...在StatefulWidget类中的某处...

  @override
  void initState() {
    super.initState();

    someClass.onCallback = _onCallback;
  }

  _onCallback(){
    print('callback');
  }

我猜这里if(_callback != null){_callback()}我们初始化了回调(如果不正确的话)。但是为什么在initState中我们调用不带参数的onCallback导致setter回调具有voidcallback参数呢?

1 个答案:

答案 0 :(得分:1)

我不了解Dart,但我知道Java,JavaScript,Groovy和C / C ++都有一定的延伸。

您正在误解事物:

  set onCallback(VoidCallback callback){
    _callback = callback;
  }

_callback = callback是一个赋值:我们为_callback赋参数callback的值。

基于onCallback的签名,尤其是 set ,表达式someClass.onCallback = _onCallback也是赋值,除了它调用了 setter

据我了解,_callback是一个函数,但默认值为null。您不能调用null之类的东西,因为否则会出错:Java / Groovy将抛出NullPointerException,而Dart可能会类似。

因此以下代码在调用_callback之前先检查其是否为空:

  if(_callback != null){
      _callback();
  }

如前所述,我不了解Dart,但看到它是JavaScript的替代 (引自Wikipedia),您有相同的概念:每个对象都是引用,引用可以是{ {1}}。