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