首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用TextFormField单独验证onFieldSubmitted

如何使用TextFormField单独验证onFieldSubmitted
EN

Stack Overflow用户
提问于 2019-06-13 00:20:14
回答 2查看 6.1K关注 0票数 8

我正在制作一个定制的TextFormField Widget,它将被多次使用。如何在不验证同一列表/行/列中的任何其他TextFormField的情况下验证单个TextFormField。

代码语言:javascript
复制
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发送验证错误。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-06-13 09:31:15

TextField中的验证是基于放置在其中的Form (而不是ColumnRowList)进行的。要验证TextFields,分别将它们放在不同的表单中,分配不同的键并分别调用_formKey.currentState.validate

代码语言:javascript
复制
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();
      }),
    );
  }
}
票数 11
EN

Stack Overflow用户

发布于 2021-02-01 15:09:03

关于一个封闭问题的信息:

您可以使用autovalidateMode

目前有3种模式。我们以前有折旧的autovalidate。这只适用于FormFields和内部表单。

示例

代码语言:javascript
复制
       TextFormField(
                  autocorrect: false,
                  autovalidateMode: AutovalidateMode.onUserInteraction,
                  cursorColor: Colors.black,
                  key: _usernameKey,

参考

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56571864

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档