在布尔值变化时更新表单验证器

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