Flutter 简单的TextFormField验证程序,但不返回任何内容

Flutter 简单的TextFormField验证程序,但不返回任何内容,flutter,Flutter,我有一个关于如何使用验证器的问题。我看不出哪里弄错了。我编写的代码是,当单击一个按钮时,它会弹出一个对话框,要求用户输入一个名称 final GlobalKey<FormState> _formKey = GlobalKey<FormState>(); FlatButton( onPressed: () { showDialog( context: context, builder: (_) => Dialog(

我有一个关于如何使用验证器的问题。我看不出哪里弄错了。我编写的代码是,当单击一个按钮时,它会弹出一个对话框,要求用户输入一个名称

final GlobalKey<FormState> _formKey = GlobalKey<FormState>();

FlatButton(
  onPressed: () {
    showDialog(
      context: context,
      builder: (_) => Dialog(
        child: Form(
          key: _formKey,
          child: Column(
            children: [
              TextFormField(
                key: _formKey,
                controller: roomController,
                validator: (String value) {
                  if (value.isEmpty) {
                    return 'Please create name';
                    } else if (NameList.contains(value)) {
                      return 'Existed';
                  }
                  return null;
                },
              ),
              RaisedButton(
                onPressed: () {},
                child: Text('Create'),
              ),
            ],
          ),
        ),
      ),
    );
  },
  child: Text('Create'),
),
final GlobalKey _formKey=GlobalKey();
扁平按钮(
已按下:(){
显示对话框(
上下文:上下文,
生成器:()=>对话框(
孩子:表格(
键:_formKey,
子:列(
儿童:[
TextFormField(
键:_formKey,
控制员:房间控制员,
验证器:(字符串值){
if(value.isEmpty){
返回“请创建名称”;
}else if(NameList.contains(value)){
返回“已存在”;
}
返回null;
},
),
升起的按钮(
按下:(){},
子项:文本('Create'),
),
],
),
),
),
);
},
子项:文本('Create'),
),
这些代码工作正常,除了验证器部分,我想做的都做了。 我错过什么了吗


谢谢。

为了使验证生效,您有两个选择,您的代码是正确的,因为您没有触发验证:

  • 打电话
  • 这将触发验证

  • 旧的解决方案是使用
    autovalidate:true
    参数设置为
    Form
    (1.19之后不推荐使用)。现在,您需要使用
    AutovalidateMode
    ,并且您有一些选项,如
    onUserInteraction
    始终
    禁用
    。Yu可以查看更多信息


  • 如果用户单击按钮时需要验证,则可以使用第一个按钮,第二个按钮是动态的,具体取决于您传递给“``Form``的参数。您应该像下面这样在onPress按钮中检查验证

    final GlobalKey<FormState> _formKey = GlobalKey<FormState>();
    
    FlatButton(
      onPressed: () {
        showDialog(
          context: context,
          builder: (_) => Dialog(
            child: Form(
              key: _formKey,
              child: Column(
                children: [
                  TextFormField(
                    key: _formKey,
                    controller: roomController,
                    validator: (String value) {
                      if (value.isEmpty) {
                        return 'Please create name';
                        } else if (NameList.contains(value)) {
                          return 'Existed';
                      }
                      return null;
                    },
                  ),
                  RaisedButton(
                    onPressed: () {
               if(_formKey.currentState.validate()){
               return //someting
                         }
                  },
                    child: Text('Create'),
                  ),
                ],
              ),
            ),
          ),
        );
      },
      child: Text('Create'),
    ),
    
    final GlobalKey _formKey=GlobalKey();
    扁平按钮(
    已按下:(){
    显示对话框(
    上下文:上下文,
    生成器:()=>对话框(
    孩子:表格(
    键:_formKey,
    子:列(
    儿童:[
    TextFormField(
    键:_formKey,
    控制员:房间控制员,
    验证器:(字符串值){
    if(value.isEmpty){
    返回“请创建名称”;
    }else if(NameList.contains(value)){
    返回“已存在”;
    }
    返回null;
    },
    ),
    升起的按钮(
    已按下:(){
    if(_formKey.currentState.validate()){
    返回//someting
    }
    },
    子项:文本('Create'),
    ),
    ],
    ),
    ),
    ),
    );
    },
    子项:文本('Create'),
    ),
    
    final GlobalKey<FormState> _formKey = GlobalKey<FormState>();
    
    FlatButton(
      onPressed: () {
        showDialog(
          context: context,
          builder: (_) => Dialog(
            child: Form(
              key: _formKey,
              child: Column(
                children: [
                  TextFormField(
                    key: _formKey,
                    controller: roomController,
                    validator: (String value) {
                      if (value.isEmpty) {
                        return 'Please create name';
                        } else if (NameList.contains(value)) {
                          return 'Existed';
                      }
                      return null;
                    },
                  ),
                  RaisedButton(
                    onPressed: () {
               if(_formKey.currentState.validate()){
               return //someting
                         }
                  },
                    child: Text('Create'),
                  ),
                ],
              ),
            ),
          ),
        );
      },
      child: Text('Create'),
    ),