Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Flutter 颤振-仅当TextField失去焦点时验证TextFormField_Flutter_Dart - Fatal编程技术网

Flutter 颤振-仅当TextField失去焦点时验证TextFormField

Flutter 颤振-仅当TextField失去焦点时验证TextFormField,flutter,dart,Flutter,Dart,我有一个关于验证文本表单字段的问题 是否有一种方法仅在TextFormField失去焦点时验证其值 我想调用一个API来检查当焦点改变时我的数据库中是否已经存在用户名。如果我在TextFormField中将autoValidate设置为true,则每次用户按键时都会进行验证。因此,如果用户名有20个字符,它将调用我的API 20次。因此,为了消除开销,我只想在焦点改变时调用API。您可以将focusNode附加到TextField,以便在焦点改变时可以进行API调用并验证文本。在你的课堂上试试这

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

是否有一种方法仅在TextFormField失去焦点时验证其值


我想调用一个API来检查当焦点改变时我的数据库中是否已经存在用户名。如果我在TextFormField中将autoValidate设置为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中这样做


您可以将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中这样做

我没有找到任何捷径。但我已经做了如下代码,这是为我工作

我没有找到任何捷径。但我已经做了如下代码,这是为我工作


非常感谢,阿尤什!!这是完美的工作!我真的很感激!!!!!!谢谢:你可以接受我的回答,以帮助他人轻松找到解决方案。抱歉,耽误了时间。。。我接受你的回答:非常感谢!!这是完美的工作!我真的很感激!!!!!!谢谢:你可以接受我的回答,以帮助他人轻松找到解决方案。抱歉,耽误了时间。。。我接受你的回答:谢谢
  final formKey = GlobalKey<FormState>();
  FocusNode textFieldFocusNode = FocusNode();
  bool canCleartextFieldError = false;

  @override
  void initState() {
    super.initState();
    addListener();
  }  
  
  addListener(){
    textFieldFocusNode.addListener(() {
      setState(() {
        canCleartextFieldError = textFieldFocusNode.hasFocus;
      });
    });
  }

  @override
  Widget build(BuildContext context) {
    return Form(
      autovalidateMode: AutovalidateMode.onUserInteraction,
      key: formKey,
      child: SingleChildScrollView(
        child: Column(
          children: <Widget>[
            TextFormField(
              focusNode: textFieldFocusNode,
              validator: (text) {
                return canCleartextFieldError == true? null: text == ''? 'please enter text here...': null;
              },
            ),
            FlatButton(
              child: Text('Button'),
              onPressed: () {
                setState(() { canCleartextFieldError = false; });
                if(formKey.currentState.validate()){
                  // Todo: do your valid job here...
                }
              },
            )
          ],
        ),
      ),
    );
  }