Flutter TextFormFieldでkeyboardの完了ボタンを押すと入力内容が全て消える
解決したいこと
TextFormField
でkeyboardの完了ボタンを押すと入力内容が全て消えてしまいます。。
keyboardの完了ボタンを押してkeyboardが閉じても、TextFormField
の入力内容はそのまま保持できるようにしたいです!
なんでdoneを押すとTextFormFieldに入力した値が消えるのだろうか??? pic.twitter.com/Q2b82Hzx3q
— Gento アプリ&web (@gento34165638) February 6, 2023
該当するソースコード
final numberProvider = StateProvider<int>((ref) {
return 3;
});
class WomanNameScreen extends ConsumerWidget {
WomanNameScreen({super.key});
final _formKey = GlobalKey<FormState>();
@override
Widget build(BuildContext context, WidgetRef ref) {
final numberOfMember = ref.watch(numberProvider);
List<TextEditingController> _nameController =
List.generate(numberOfMember, (i) => TextEditingController());
return Scaffold(
body: Form(
key: _formKey,
child: ListView.builder(
itemCount: numberOfMember,
itemBuilder: (BuildContext context, int index) {
int memberIndex = index + 1;
String memberIndexText = memberIndex.toString();
return TextFormField(
validator: (value) {
if (value == null || value.isEmpty) {
return '名前入れてね!';
}
return null;
},
textInputAction: TextInputAction.done,
controller: _nameController[index],
maxLength: 5,
maxLines: 1,
decoration: InputDecoration(
hintText: '$memberIndexText人目の名前'),
);
}),
),
);
}
}
numberProvider
の値は別の画面で入力した数値をflutter_riverpodで保持して、その数値分だけTextFormField
が作成されます。
TextInputAction.next
にすると最後のTextFormField
でnextを押すと、全ての入力内容が消えます。。。
どうすればkeyboardの完了ボタン(done)を押した後も、値をTextFormField
で保持できるのでしょうか?
試したこと
List<TextEditingController> _nameController =
List.generate(numberOfMember, (i) => TextEditingController());
これをbuildメソッド外にするとkeyboardの完了ボタンを押しても値は消えず、保持されていました。しかし_nameController
の数は固定値で確定させることはできず、riverpodで保持したnumberProvider
の値を使いたいです。
しかしbuildメソッド外にするとnumberProvider
の値を使うことができません。。
画面遷移の時に値を渡しても同様に
The instance member 'widget' can't be accessed in an initializer. Try replacing the reference to the instance member with a different expression
のエラーになりできないです。どうすれば良いでしょうか?
0