首页 > 解决方案 > Flutter firebase 电子邮件/密码错误处理无法正确检查空白字段

问题描述

你好 Flutter 新手在这里!我已经设置了登录和错误检查部分。

我想对字段进行一些检查,但我意识到如果用户执行以下行为,我的错误检查代码将不起作用:

  1. 在电子邮件文本字段中输入一些文本
  2. 在密码文本字段中输入一些文本
  3. 退格删除电子邮件文本字段中的文本
  4. 点击平面按钮提交

代码将通过 if 检查并继续登录...但我认为由于电子邮件文本字段在我点击按钮时为空,它仍应遵循 if 检查?

提前致谢!

            FlatButton(
              onPressed: () async {
                if (password == null && email == null) {
                  print('empty sign in info');
                  setState(() {
                    alertText = 'You have not entered your login info!';
                  });
                } else if (password == null) {
                  setState(() {
                    alertText = 'Password cannot be blank!';
                  });
                } else if (email == null) {
                  setState(() {
                    alertText = 'Email cannot be blank!';
                  });
                } else {
                  setState(() {
                    showSpinner = true;
                  });
                  try {
                    final newUser = await _auth.signInWithEmailAndPassword(
                        email: email, password: password);
                    if (newUser != null) {
                      Navigator.pushNamed(context, ViewScreen.id);
                    }
                  } catch (e) {
                    print(e);
                  }
                }
              },

标签: if-statementfluttertextfield

解决方案


看起来当用户甚至没有点击用户名或密码文本字段时,emailpassword字符串为空。但是如果用户输入了一些东西(因此改变了emailandpassword字符串)然后删除了他输入的内容,那么字符串将不是null,它们将等于空字符串"",这与null. 因此,您的控制流将直接跳到else您那里的最后一个,这不是您想要的。

考虑添加检查何时email.isEmpty或何时password.isEmpty捕获这些事件,或首先初始化您的emailpassword字符串""。这样您就可以确保它们不会是null,并且您只需在代码中替换email == nullbyemail.isEmptypassword == nullby password.isEmpty,一切都会正常工作。


推荐阅读