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

是否只有在失去焦点时才验证TextFormField的值的方法?

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

最佳答案

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

关于flutter - Flutter-仅当TextField失去焦点时才验证TextFormField,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59376676/

10-10 17:57