dart - 将带参数的函数传递给 VoidCallback

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

例如这样的:

class MyClass {
  void doSomething(int i){

  }

  MyOtherClass myOtherClass = new MyOtherClass(doSomething);
}


class MyOtherClass {
  final VoidCallback callback(int);

  MyOtherClass(this.callback);

  callback(5);
}

最佳答案

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); }
}

效果一模一样,只是允许你为函数类型使用更短的名称,但只有在你经常使用它的情况下才真正有意义。

https://stackoverflow.com/questions/50085748/

相关文章:

flutter - 在 Flutter 中使用 SafeArea

dart - Flutter:在简历上更新小部件?

dart - 如何在 flutter 的另一个有状态小部件中访问在一个有状态小部件中创建的对象

flutter - 如何在 Dart 中对 Textfield onChange 进行去抖动?

flutter - 如何在 Flutter 中创建带有圆角的模态底页?

dart - 在所有页面 Flutter 中持久化 AppBar Drawer

dart - Flutter:使用按钮更改标签栏 View 中的当前标签

android-studio - 使用 Android Studio 自动在右括号后插入注释

flutter - 如何在 flutter 中听焦点变化?

flutter - 如何让应用程序保持清醒?