Flutter - 仅在 TextField 失去焦点时验证 TextFormField

pas*_*l22 2 dart flutter

我有一个关于验证文本表单字段的问题。

有没有办法TextFormField只在失去焦点时才验证 a 的值?

我想调用一个 API 来检查当焦点改变时用户名是否已经存在于我的数据库中。如果我设置autoValidateTextFormFieldtrue,它会在用户每次按下一个键时进行验证。因此,如果用户名有 20 个字符,它将调用我的 API 20 次。因此,为了消除开销,我只想在焦点改变时调用 API。

Ayu*_*ani 9

您可以将 focusNode 附加到,TextField以便每当焦点更改时,您都可以进行 api 调用并验证文本。在你的课堂上试试这个

FocusNode focusNode;
bool _hasInputError;
String text;
  @override
  void initState() {
    super.initState();
    focusNode = new FocusNode();
    focusNode.addListener(() {
      if (!focusNode.hasFocus) {
        setState(() {
          _hasInputErro = //Check your conditions on text variable
        });
      }
    });
  }
Run Code Online (Sandbox Code Playgroud)

并在TextField这样做

TextField(
  focusNode: _focusNode,
  decoration: InputDecoration(
     errorText: _hasInputError ? "Your error message" : null,
   ),
   onChanged: (String _text) {
     text = _text;
   },
 )  
Run Code Online (Sandbox Code Playgroud)