首页 > 解决方案 > Flutter - 仅在 TextField 失去焦点时验证 TextFormField

问题描述

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

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

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

标签: flutterdart

解决方案


您可以将 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
        });
      }
    });
  }

TextField这样做

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

推荐阅读