【问题标题】:Update Form validator on boolean change在布尔更改上更新表单验证器
【发布时间】:2021-05-01 10:27:16
【问题描述】:

我创建了一个flutter登录/注册屏幕,如果firebase返回错误,我想给出一个错误:

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");
      });
    }
  }
}

通过将布尔值设置为 true,您想更新输入验证器,使其返回错误:

validator: (value) {
    if (value.isEmpty) {
      return (kPassNullError);
    }
    if (wrongEmailOrPassword) {
      return (kWrongEmailOrPassword);
    }
    return null;
  },

但它不起作用并且不会更新验证器/错误消息。如果我重新加载表单,它只会更新它。按下提交按钮后如何更新错误信息?

感谢您阅读长文:)

【问题讨论】:

    标签: flutter validation dart setstate


    【解决方案1】:

    只有当您validate() 表单时才会调用验证器函数。因此,一种简单的解决方案是在接收并设置错误后再次调用formState.validate()。那时你可能甚至不需要setState

    【讨论】:

      猜你喜欢
      • 2022-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-18
      • 1970-01-01
      • 2013-01-20
      • 1970-01-01
      • 2019-08-21
      相关资源
      最近更新 更多