如何重置 TextFormField 中的错误消息?

MRu*_*MRu 7 dart flutter

我知道这是一个简单的问题,但我没有找到如何做到这一点。当用户在字段中输入内容时,如何重置 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(),
  ),
);
Run Code Online (Sandbox Code Playgroud)

更新:我正在使用控制器为用户输入添加侦听器。但我只想重置错误消息而不是再次验证表单。这可能吗?我怎样才能做到这一点?

  _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);
  }
Run Code Online (Sandbox Code Playgroud)

Ank*_*dik 12

您可以使用自动验证功能 Form

如果您正在寻找此解决方案,

“只要您输入它就会验证您的输入并显示/隐藏错误”

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

  1. 默认

    _autoValidate = false;

  2. 形式

    body: Form( key: _formKey,
                autovalidate: _autoValidate,....)
Run Code Online (Sandbox Code Playgroud)
  1. 当用户按下提交一次时启用它,
    if (_formKey.currentState.validate()) {
      // All Good
    } else {
      // start auto validate
      setState(() {
        _autoValidate = true;
      });
    }
Run Code Online (Sandbox Code Playgroud)

更新 :-

现在Form.autovalidate已弃用。所以使用

Form.autovalidateMode = AutovalidateMode.onUserInteraction 
Run Code Online (Sandbox Code Playgroud)


Joh*_*han 8

Form.autovalidate已被弃用。用于Form.autovalidateMode = AutovalidateMode.onUserInteraction在用户再次开始与表单字段交互时自动清除错误,而无需自己管理任何状态。


Moh*_*dri 0

我建议使用控制器并听取用户输入。每当他输入内容时,您都可以再次验证()您的表单