首页 > 解决方案 > 如何使用 onFieldSubmitted 单独验证 TextFormField

问题描述

我正在制作一个将多次使用的自定义 TextFormField 小部件。如何在不验证同一列表/行/列中的任何其他 TextFormField 的情况下验证单个 TextFormField。

Widget timeTextField (TextEditingController controller){
       return TextFormField(
         controller: controller,
         validator: (String userInput){
           if(userInput.isEmpty){return 'Need to input time';}
         },
         onFieldSubmitted: (String userInput){
           setState(() {
             debugPrint(userInput);
             controller.text = "amout";
             debugPrint(controller.text);
         });

   },
   );
 }

当用户在键盘上按下提交时,它会验证,如果 TextFormField 为空,它只会向用户按下提交的那个 TextFormField 发送验证错误。

标签: flutterdart

解决方案


s中的验证TextField基于Form它们被放置在(而不是ColumnRowList)中。要分别验证 TextField,请将它们以不同的形式放置,分配不同的键并_formKey.currentState.validate分别调用。

class HomePage extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    final GlobalKey<FormState> _form1Key = GlobalKey();
    final GlobalKey<FormState> _form2Key = GlobalKey();
    final GlobalKey<FormState> _form3Key = GlobalKey();

    return Scaffold(
      body: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        children: <Widget>[
          Form(
            key: _form1Key,
            child: TextFormField(
              validator: (value) {
                if (value.isEmpty) return "Cannot be empty";
              },
            ),
          ),
          Form(
            key: _form2Key,
            child: TextFormField(
              validator: (value) {
                if (value.isEmpty) return "Cannot be empty";
              },
            ),
          ),
          Form(
            key: _form3Key,
            child: TextFormField(
              validator: (value) {
                if (value.isEmpty) return "Cannot be empty";
              },
            ),
          ),
        ],
      ),
      floatingActionButton: FloatingActionButton(onPressed: () {
        _form2Key.currentState.validate();
      }),
    );
  }
}

推荐阅读