如何使用onFieldSubmitted分别验证TextFormField

时间:2019-06-13 00:20:14

标签: flutter dart

我正在制作一个自定义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);
         });

   },
   );
 }

它会验证用户何时按下键盘上的Submit,如果TextFormField为空,它将仅向用户按下Submit的那个TextFormField发送验证错误。

2 个答案:

答案 0 :(得分:1)

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();
      }),
    );
  }
}

答案 1 :(得分:0)

仅提供有关已关闭问题的信息:

您可以使用 autovalidateMode

目前有 3 种模式。我们曾经有过折旧的 autovalidate。这仅适用于 FormFields 和 Forms 内部。

示例

       TextFormField(
                  autocorrect: false,
                  autovalidateMode: AutovalidateMode.onUserInteraction,
                  cursorColor: Colors.black,
                  key: _usernameKey,

参考

  • Flutter 官方 docs