業務にて詰まった部分とその解決方法を簡単に紹介
発生した問題
flutterでテキスト入力欄を実装していた時に発生
内容としてはTextFormField
で実装した入力欄をタップしてソフトキーボードを開くと、1文字入力するたびにソフトキーボードが閉じてしまう状態になってしまいました
解決策(その1)
TextFormField
だけではなく、FormBuilder
でも発生する問題とのことで、解決方法も確立されていました
シンプルにGlobalKey
を生成して指定することで解決するとのこと
TextFormFieldの場合
final formKey = GlobalKey</*state指定*/>();
Form(
key: formKey,
child: TextFormField(
// いろんな設定
),
);
FormBuilderの場合
final formKey = GlobalKey</*state指定*/>();
FormBuilder(
key: formKey,
// いろんな設定
);
これで一件落着と思いきや…
解決してなかった
上記の実装に変更してみたものの何も変わらず
何が問題なのかと検索していたところ、flutter_hooks
の場合は上記の解決策では足りないとのこと
解決策(その2)
GlobalKey
を使うという部分は同じですが、生成の仕方に違いがありました
useMemorizedで生成する必要があるみたいです
final formKey = useMemorized(() => GlobalKey</*state指定*/>());
これを解決策(その1)と同じようにそれぞれのFormに指定することで解決
シンプルな問題も二段構えになると手強くなるという話でした