在布尔值变化时更新表单验证器
Update Form validator on boolean change
我创建了一个 flutter 登录/注册屏幕,如果 firebase returns 出错,我想给出一个错误:
if (formState.validate()) {
formState.save();
try {
UserCredential userCredential = await FirebaseAuth.instance
.signInWithEmailAndPassword(email: email, password: password);
User user = userCredential.user;
Navigator.popAndPushNamed(context, HomeScreen.routeName);
} catch (e) {
print(e.message);
print("failded with error code ${e.code}");
//catch if user not found
if (e.code == "user-not-found") {
setState(() {
//set true to update validator
wrongEmailOrPassword = true;
print("Error caught");
});
}
//catch if password wrong
if (e.code == "wrong-password") {
setState(() {
//set true to update validator
wrongEmailOrPassword = true;
print("Error caught");
});
}
}
}
通过将布尔值设置为真,您想要更新输入验证器,使其 returns 出现错误:
validator: (value) {
if (value.isEmpty) {
return (kPassNullError);
}
if (wrongEmailOrPassword) {
return (kWrongEmailOrPassword);
}
return null;
},
但它不起作用,也不会更新验证器/错误消息。如果我重新加载表单,它只会更新它。按下提交按钮后如何更新错误消息?
感谢阅读长文:)
仅当您 validate()
表单时才会调用验证器函数。因此,一种简单的解决方案是在收到并设置错误后再次调用 formState.validate()
。那时你可能甚至不需要 setState
。
我创建了一个 flutter 登录/注册屏幕,如果 firebase returns 出错,我想给出一个错误:
if (formState.validate()) {
formState.save();
try {
UserCredential userCredential = await FirebaseAuth.instance
.signInWithEmailAndPassword(email: email, password: password);
User user = userCredential.user;
Navigator.popAndPushNamed(context, HomeScreen.routeName);
} catch (e) {
print(e.message);
print("failded with error code ${e.code}");
//catch if user not found
if (e.code == "user-not-found") {
setState(() {
//set true to update validator
wrongEmailOrPassword = true;
print("Error caught");
});
}
//catch if password wrong
if (e.code == "wrong-password") {
setState(() {
//set true to update validator
wrongEmailOrPassword = true;
print("Error caught");
});
}
}
}
通过将布尔值设置为真,您想要更新输入验证器,使其 returns 出现错误:
validator: (value) {
if (value.isEmpty) {
return (kPassNullError);
}
if (wrongEmailOrPassword) {
return (kWrongEmailOrPassword);
}
return null;
},
但它不起作用,也不会更新验证器/错误消息。如果我重新加载表单,它只会更新它。按下提交按钮后如何更新错误消息?
感谢阅读长文:)
仅当您 validate()
表单时才会调用验证器函数。因此,一种简单的解决方案是在收到并设置错误后再次调用 formState.validate()
。那时你可能甚至不需要 setState
。