kokogento
@kokogento (ここ げんと)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

Flutter TextFormFieldでkeyboardの完了ボタンを押すと入力内容が全て消える

解決したいこと

TextFormFieldでkeyboardの完了ボタンを押すと入力内容が全て消えてしまいます。。
keyboardの完了ボタンを押してkeyboardが閉じても、TextFormFieldの入力内容はそのまま保持できるようにしたいです!

該当するソースコード

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

のエラーになりできないです。どうすれば良いでしょうか?:fearful:

0

No Answers yet.

Your answer might help someone💌