Dart/FlutterでNullableなcallback型へアクセスする方法です。
call()メソッドを使う方法
下記のように呼ぶのが最も簡単だと思います。
nullableCallback?.call();
解説
Nullableなcallback
Flutterではcallback関数が無効値を許容するためにNullable(Null許容型)で実装されていることがよくあります。例えばボタン系Widgetの押下時イベントは以下のように宣言されています。
final VoidCallback? onPressed;
onPressedにnullを代入することで、callbackが無効であることを表すことができます。
さらにボタン系WidgetではonPressedがコンストラクタでrequiredとして指定されており、恐らくcallbackの設定し忘れが無いように(無効なら明示的にnullをセットするように強制する)という設計意図だと思われます。
.?演算子とcall()
Nullableなcallback関数にアクセスする方法はいくつかありますが、.?演算子とcall()を使うのがスマートです。
?.演算子は変数がnullでないことを確認してからメソッド/メンバにアクセスします。
call()メソッドはcallback関数(function型)で使えるメソッドで、普通に関数を呼び出すことができます。
コード例
Nullableなcallback関数メンバを持つクラスと、そのアクセス例です。ボタン系Widgetなどと同じく、requiredとしてみました。(位置引数として実装しても同じです)
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に変更するという方針を取ることも考慮すべきかと思います。
コメント