TL;DR
GlobalKey
は StatefullWidget
で使われる機能で、キーを設定したウィジェットの状態変化を外部から参照できるようになります。
(子ウィジェットの状態変化を親ウィジェットが参照できるなど)
ですが、 StatelessWidget
では使うことができません。パッケージでキーを利用しているものもあり、困りますよね?
そんなときは GlobalObjectKey
を使えば OK です!
class Sample extends StatelessWidget {
@override
Widget build(BuildContext context) {
const key = GlobalObjectKey<FormState>(context);
return RaisedButton(
child: Text("Button"),
onPressed: () => key.currentState.save(),
);
}
}
キーを複数要しする場合にGlobalObjectKey
のコンストラクタの引数に context
を渡すとエラーになるので、次のように一意の値を渡すといいです。
class Sample extends StatelessWidget {
@override
Widget build(BuildContext context) {
const key1 = GlobalObjectKey<FormState>('__KEY1__');
const key2 = GlobalObjectKey<FormState>('__KEY2__');
// ...
}
}
まとめ
TL;DR で終わる短い話でしたが、あまり情報が多く出てこないのでまとめました。
この記事がどなたかの役に立てれば幸いです
参考
Flutter Widget Keyの種類と使い方について
Multiple widgets used the same GlobalKey error