我知道这是一个简单的问题,但我没有找到如何做到这一点。当用户在字段中输入内容时,如何重置TextFormField中的错误消息。像onchange监听器之类的东西。我注意到onChanged在TextField中可用,但在TextFormField中不可用。我怎样才能做到这一点?

final _email = Container(
  child: TextFormField(
    decoration: InputDecoration(labelText: email),
    keyboardType: TextInputType.emailAddress,
    controller: emailController,
    validator: _validateEmail,
    onSaved: (input) => _stringEmail = input.toLowerCase().trim(),
  ),
);

更新:我正在使用 Controller 来添加监听器以供用户输入。但是我只想重置错误消息,而不是再次验证表单。这可能吗?我怎样才能做到这一点?
  _resetEmailErrorMessage() {
    print("Second text field: ${emailController.text}");
    //replace clear to something that can reset the validation error message
    emailController.clear();
  }

  @override
  void initState() {
    super.initState();

    //start listening to changes
    emailController.addListener(_resetEmailErrorMessage);
  }

最佳答案

您可以使用Form的自动验证功能
如果您正在寻找这种解决方案,

Flutter提供了自动验证功能,您只需要在表单级别启用它即可。

  • 默认_autoValidate = false;
  • 表格

  •     body: Form( key: _formKey,
                    autovalidate: _autoValidate,....)
    
  • 当用户按下一次提交时启用它

  •     if (_formKey.currentState.validate()) {
          // All Good
        } else {
          // start auto validate
          setState(() {
            _autoValidate = true;
          });
        }
    
    更新:-
    现在不建议使用Form.autovalidate。所以用
    Form.autovalidateMode = AutovalidateMode.onUserInteraction
    

    关于flutter - 如何重置TextFormField中的错误消息?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57574390/

    10-13 09:36