1. ホーム
  2. dart

[解決済み] VoidCallbackにパラメータを持つ関数を渡す

2023-06-26 08:25:35

質問

VoidCallbackにパラメータを持つFunctionを渡すことはできますか?

例えばこのようなものです。

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 フィールドの型を、1つの整数の引数で呼び出すことができ、有用な値を返さない関数の型であると定義しています。また 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); }
}

効果はまったく同じで、関数型に短い名前を使えるようになるだけですが、それはそれをたくさん使う場合にのみ本当に意味があることです。