`flutter_hooks`を使用して`TextField`を扱う場合に`controller`プロパティには`useTextEditingController`で生成したインスタンスを渡す
TL;DR
flutter_hooks
を使用してテキストフィールドを扱う時にHookWidget
を継承したクラスの場合TextEditingController
だとうまく動かなかったのでuseTextEditingController
使う。
詳細
発生する問題
以下のようにHookWidget
を継承したクラスでTextField
コンポーネントを扱う場合に、TextField
のcotroller
プロパティに、Flutter標準のTextEditingController
のインスタンスを渡しています。
import 'package:flutter/material.dart'
import 'package:flutter_hooks/flutter_hooks.dart';
class Sample extends HookWidget {
final _controller = TextEditingController();
@override
Widget build(BuildContext context) {
return TextField(
controller: _controller,
labelText: "Input",
)
}
}
すると以下のような不具合が発生していた通りに動作しませんでした。
- 値を入力した後にテキストフィールドからフォーカスを外すと入力した値が消えてしまう
-
useEffect
など別の関数でcontroller.text
の初期値を入力するなど行っても反映されない
対応
HookWidget
を継承しているクラスの中でTextEditingController
を扱う場合はflutter_hooks
で 用意されているuseTextEditingController
を使用して生成されたインスタンスを使う必要がありました。
以下の変更加えることで前述した不具合は解消されます。
import 'package:flutter/material.dart'
import 'package:flutter_hooks/flutter_hooks.dart';
class Sample extends HookWidget {
- final _controller = TextEditingController();
+ final _controller = useTextEditingController();
@override
Widget build(BuildContext context) {
return TextField(
controller: _controller,
labelText: "Input",
)
}
}
環境
- Flutter 2.10.0
- Dart SDK version: 2.16.0
Author And Source
この問題について(`flutter_hooks`を使用して`TextField`を扱う場合に`controller`プロパティには`useTextEditingController`で生成したインスタンスを渡す), 我々は、より多くの情報をここで見つけました https://qiita.com/SoarTec-lab/items/809aed85eb4253de8165著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .