我有两个文本表单字段内的一个表单在Flutter。我已经添加了验证器来警告无效值。但我希望在用户再次开始键入时隐藏警告。如何隐藏这些警告?的数据我以为我可以使用onTap或onChanged功能来实现这一点,但我想不出一种方法来实现这一点。
xesrikrc1#
TextFormField具有focusNode属性。当用户编辑TextFormField时,与该字段关联的FocusNode将具有输入焦点。您可以通过节点的hasFocus属性查询FocusNode的状态。因此,为每个TextFormField创建并传递一个FocusNode,然后在验证器函数中查询相关节点的状态。例如,电子邮件TextFormField的代码应该如下所示:
TextFormField
focusNode
FocusNode
hasFocus
final emailNode = FocusNode(); ... TextFormField( focusNode: emailNode, validator: (value) { ... else if(widget.inputType == InputType.email && !Validation.isValidEmail(value) && !emailNode.hasFocus){ return 'Please enter a valid email!; } }, ),
字符串这样,当用户点击电子邮件字段并开始输入新值时,电子邮件字段将具有焦点,因此验证器中的最后一个条件将是false,因此错误消息将消失。当用户点击密码字段时,电子邮件字段将失去焦点,因此!emailNode.hasFocus将为true,并且如果电子邮件字段中的值不是有效的电子邮件地址,则电子邮件字段下的错误消息将重新出现。P.S.下次请贴代码而不是截图。
false
!emailNode.hasFocus
2skhul332#
尝试将小部件的autoValidationMode设置为onUserInteraction:
autovalidateMode:AutovalidateMode.onUserInteraction,
字符串
2条答案
按热度按时间xesrikrc1#
TextFormField
具有focusNode
属性。当用户编辑TextFormField
时,与该字段关联的FocusNode
将具有输入焦点。您可以通过节点的hasFocus
属性查询FocusNode
的状态。因此,为每个
TextFormField
创建并传递一个FocusNode
,然后在验证器函数中查询相关节点的状态。例如,电子邮件
TextFormField
的代码应该如下所示:字符串
这样,当用户点击电子邮件字段并开始输入新值时,电子邮件字段将具有焦点,因此验证器中的最后一个条件将是
false
,因此错误消息将消失。当用户点击密码字段时,电子邮件字段将失去焦点,因此!emailNode.hasFocus
将为true,并且如果电子邮件字段中的值不是有效的电子邮件地址,则电子邮件字段下的错误消息将重新出现。P.S.下次请贴代码而不是截图。
2skhul332#
尝试将小部件的autoValidationMode设置为onUserInteraction:
字符串