我对修剪功能有疑问。当我使用修剪时,它不起作用。当我添加空格,然后使用修剪功能,但我的验证仍然是正确的。而不是修剪必须删除所有空白。希望你理解这个问题。预先谢谢你。
Widget _buildUserNameField() {
return EnsureVisibleWhenFocused(
focusNode: _emailFocusNode,
child: TudoEmailWidget(
focusNode: _emailFocusNode,
prefixIcon: Icon(Icons.email),
labelText: AppConstantsValue.appConst['login']['email']['translation'],
validator: Validators().validateEmail,
onSaved: (val) => _username = val.trim(),
),
);
}
答案 0 :(得分:1)
仅在保存表单(调用onSaved
)时调用form.save()
事件。
如果您想在提交表单之前验证值,只需通过以下方式将值传递给验证器:
validator: (val) => Validators().validateEmail(val)
并更新您的validateEmail
以接受该参数。
如果只想删除尾随空格,请使用trimRight()函数。
作为一个例子,这在我这边很完美:
class Validators {
static String validateEmail(String value) {
String pattern =
r'^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$';
RegExp regExp = new RegExp(pattern);
if (value == null || value.length <= 0) {
return "Email is Required";
} else if (!regExp.hasMatch(value)) {
return "Invalid Email";
} else {
return null;
}
}
}
TextFormField(
maxLines: 1,
inputFormatters: [LengthLimitingTextInputFormatter(128)],
validator: (val) => Validators.validateEmail(val.trimRight()),
onSaved: (val) => _currMember.email = val,
initialValue: _currMember.email,
),