5
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

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

5
6
0

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
  3. You can use dark theme
What you can do with signing up
5
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?