【Dart】Nullableなcallback型へアクセスする方法

Dart/FlutterでNullableなcallback型へアクセスする方法です。

call()メソッドを使う方法

下記のように呼ぶのが最も簡単だと思います。

Dart
nullableCallback?.call();

解説

Nullableなcallback

Flutterではcallback関数が無効値を許容するためにNullable(Null許容型)で実装されていることがよくあります。例えばボタン系Widgetの押下時イベントは以下のように宣言されています。

Dart
final VoidCallback? onPressed;

onPressedにnullを代入することで、callbackが無効であることを表すことができます。

さらにボタン系WidgetではonPressedがコンストラクタでrequiredとして指定されており、恐らくcallbackの設定し忘れが無いように(無効なら明示的にnullをセットするように強制する)という設計意図だと思われます。

.?演算子とcall()

Nullableなcallback関数にアクセスする方法はいくつかありますが、.?演算子とcall()を使うのがスマートです。

?.演算子は変数がnullでないことを確認してからメソッド/メンバにアクセスします。

call()メソッドはcallback関数(function型)で使えるメソッドで、普通に関数を呼び出すことができます。

コード例

Nullableなcallback関数メンバを持つクラスと、そのアクセス例です。ボタン系Widgetなどと同じく、requiredとしてみました。(位置引数として実装しても同じです)

Dart
class Test {
  Test({required this.nullableCallback});
  VoidCallback? nullableCallback;

  void callNullable() {
    nullableCallback?.call();
  }
}

Nullableとして実装すべきか

他者に公開するコードの場合、callback関数はNullableとなっていた方が良いと思いますが、自分でしか使わない処理でnullを代入することが無いと分かっている場合にはそもそもNullableを実装しないという手段もあります。

DartはNull Safetyでnullを比較的安全に扱うことができますが、Nullableで実装することで確実にテストの項目は増えてしまいます。

まずNon Nullableで実装して、必要になった時にNullableに変更するという方針を取ることも考慮すべきかと思います。

コメント

タイトルとURLをコピーしました