LoginSignup
5

More than 3 years have passed since last update.

Flutter の GlobalKey を StatelessWidget で使いたいときはどうすればいいの?

Posted at

TL;DR

GlobalKeyStatefullWidget で使われる機能で、キーを設定したウィジェットの状態変化を外部から参照できるようになります。
(子ウィジェットの状態変化を親ウィジェットが参照できるなど)

ですが、 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 で終わる短い話でしたが、あまり情報が多く出てこないのでまとめました。
この記事がどなたかの役に立てれば幸いです :yum:

参考

:link: Flutter Widget Keyの種類と使い方について
:link: Multiple widgets used the same GlobalKey error

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
5