我正在登录屏幕上,我不想为此做基本的regEx。
我正在使用BeautyTextField中的自定义UI元素库
这是我的电子邮件和密码输入小部件
Widget emailInput(){
return BeautyTextfield(
validator: (value)=>RegExp(r"^[a-zA-Z0-9.]+@[a-zA-Z0-9]+\.[a-zA-Z]+").hasMatch(email)?"Enter Valid Email":null,
decoration: InputDecoration(labelText:"Email"),
cornerRadius: BorderRadius.all(Radius.circular(50)),
width: double.maxFinite,
height: 50,
duration: Duration(milliseconds: 300),
inputType: TextInputType.emailAddress,
keyboardType: TextInputType.emailAddress,
prefixIcon: Icon(Icons.alternate_email),
placeholder: "Email",
onSaved: (value)=> email = value,
fontFamily: "Muli",
); }
Widget passwordInput(){
return BeautyTextfield(
validator: (value)=> value.length == 6 ? "Enter Password of 6 Numbers":null,
cornerRadius: BorderRadius.all(Radius.circular(50)),
width: double.maxFinite,
height: 50,
duration: Duration(milliseconds: 300),
inputType: TextInputType.text,
prefixIcon: Icon(Icons.lock_outline),
obscureText: true,
placeholder: "Password",
onSaved: (value)=> password = value,
);
}
和我的表单小部件:
Widget build(BuildContext context) {
// Build a Form widget using the _formKey created above.
return Form(
/////////////////////////////////////////////////////////////
/// Form Body
key: signINformKey,
child:
Column(
children: <Widget>[
emailInput(),
passwordInput(),
submitButton(),
signUpButton(),
],
),
);}
如果数据与regEx匹配,我将在按下登录按钮时使用此功能,因此它将重定向到另一个页面,否则它将显示一条带有“ Login Error”消息的小吃店,但是它不起作用并且每次我单击登录按钮时,即使regEx不匹配,也会重定向到另一页,因为signINformKey.currentState.validate()
始终返回true
答案 0 :(得分:1)
实际上,如果字符串满足正则表达式,则hasMatch()
函数将返回true。您为validator
使用的代码始终返回null,因为电子邮件字符串与正则表达式不匹配,这就是为什么您直接转到下一页而不显示Snackbar的原因。您可以在正则表达式之前添加!
,因为这会反转结果。
代码:
validator: !RegExp(r"^[a-zA-Z0-9.]+@[a-zA-Z0-9]+\.[a-zA-Z]+").hasMatch(email)?"Enter Valid Email":null
答案 1 :(得分:0)
使用onChange
将输入字段中的值分配给变量并检查这些变量