【问题标题】:How to validate TextFormField individually using onFieldSubmitted如何使用 onFieldSubmitted 单独验证 TextFormField
【发布时间】:2019-06-13 00:20:14
【问题描述】:

我正在制作一个自定义的 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 发送验证错误。

【问题讨论】:

    标签: flutter dart


    【解决方案1】:

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

    您可以使用autovalidateMode

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

    示例

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

    参考

    • Flutter 官方docs

    【讨论】:

      【解决方案2】:

      TextFields 中的验证基于它们所在的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();
            }),
          );
        }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-10-29
        • 1970-01-01
        • 2021-12-08
        • 1970-01-01
        • 2021-05-14
        • 2021-02-17
        • 2013-03-13
        相关资源
        最近更新 更多