🐮

【Flutter】TextFieldのFocusNodeのエラーについて

2024/01/26に公開

記事について

textInputAction: TextInputAction.nextでキーボード入力に次へ遷移する機能を追加した際に、以下のようなエラーが出て解消に時間がかかったため備忘録。

The following assertion was thrown during method call TextInputClient.performAction: Tried to get the bounds of a focus node that didn't have its context set yet.

エラー内容について

元々テキストフォーム以外の画面をタップした際にフォーカスを外してキーボードが解除されるように、このような実装になっていた。

textForm.dart
body: GestureDetector(
	onTap: () => 
	FocusScope.of(context).requestFocus(new FocusNode()),

Flutter自体にunfocusが実装されるまでは基本的にこれでunfocusに対応していたらしい。

そこに新たにTextInputAction.nextを追加実装することとなった。
すると一番下のフォームで次へを押す→画面のどこかをタップ→再度フォームをタップ
を繰り返すとfocusが正常に外れることがなくなってしまいエラーが発生していた。

解決策

このように書き換えることでfocusが正しく動くようになった。

textForm.dart
body: GestureDetector(
        onTap: () => FocusScope.of(context).unfocus(),

参考

https://stackoverflow.com/questions/53481261/how-to-unfocus-textfield-that-has-custom-focusnode
https://stackoverflow.com/questions/74765899/flutter-focus-is-focusnode-the-thing-that-has-focus#:~:text=In the Flutter framework's focus,other forms of input focus.

Discussion