一尘不染

将带有参数的函数传递给VoidCallback

flutter

是否可以将带有参数的Function传递给VoidCallback?

例如这样的事情:

class MyClass {
  void doSomething(int i){

  }

  MyOtherClass myOtherClass = new MyOtherClass(doSomething);
}


class MyOtherClass {
  final VoidCallback callback(int);

  MyOtherClass(this.callback);

  callback(5);
}

阅读 452

收藏
2020-08-13

共1个答案

一尘不染

的声明VoidCallback

typedef void VoidCallback();

这是可以使用零参数调用并且不会返回有用值的函数类型。那似乎不是您想要的。由于该程序在语法上无效,因此尚不清楚您要做什么,但这对您有用吗:

class MyClass { 
  static doSomething(int i) { /* ... */ }
  MyOtherClass myOtherClass = new MyOtherClass(doSomething);
}
class MyOtherClass {
  final void Function(int) callback;
  MyOtherClass(this.callback);
  void callCallaback() { callback(5); }
}

在这里,我们将callback字段的类型定义为可以使用一个整数参数调用并且不返回任何有用值的函数的类型。该doSomething方法具有该类型,因此可以将其分配给callback

您也可以使用typedef命名该函数:

typedef Int2VoidFunc = void Function(int);
// or: typedef void Int2VoidFunc(int arg);
class MyOtherClass {
  final Int2VoidFunc callback;
  MyOtherClass(this.callback);
  void callCallaback() { callback(5); }
}

效果是完全一样的,它只允许您为函数类型使用一个较短的名称,但这仅在您经常使用时才有意义。

2020-08-13