初めに
ウィジェットを作成する際に、呪文のように書いているXxx({super.key})ですが、全く意味が推測できなかったので自分なりに調べてみました。
そもそも、super.keyってなんかすごいスーパーなことしてそうですよね。
そもそもXxx()では何が行われているのか
例えば、ステートレスウィジェットを作成する際は以下のように記述しますよね
class Xxx extends StatelessWidget {
Xxx({
// ここ
});
@override
Widget build(BuildContext context) {
return Container();
}
}
これはstatelessWidgetを継承しているXxxの初期化を行っています。
つまり、ここで引数を受け取ってXxx内で使えるようにしているんですね。
本題
じゃあsuper.keyって結局何?という本題に入ります。
superとkeyに分けて説明しますね。
superとは
先ほど、statelessWidgetを継承しているXxx
といいましたが、flutterが用意してくれている親クラスのstatelessWidgetを使って自作でXxxを作成しているということなんですね。
そのため、親クラスのstatelessWidgetの機能を呼び出さないとXxxは使えません。
そこで、super
を使用することで、拡張(継承)元のクラス(親クラス)のコンストラクタやメソッドを呼び出して、その機能をXxxウィジェットにも適用させることができます。だから、初期化時にsuperが必要なんですね。
keyとは
key
はその名の通り鍵です。
では、なぜkey
が必要なのかというと、例えば親クラスのstatelessWidgetには子クラスXxxやYyy、Zzzがあった場合それぞれ識別する必要があります。そこで使うのがkey
です。
まとめ
つまり、super.keyという記述は、XxxウィジェットがstatelessWidgetの機能を継承するために必要なコンストラクタの呼び出しを行い、その中でkeyを使ってXxxを識別します。
これにより、Flutterはウィジェットの状態管理やUIの更新を効率的に行うことができるんですね。
これは、statelessWidgetだけではなく、statefullWidgetも同じことが言えます