Flutter firebase email/password 错误处理未正确检查空白字段

Flutter firebase email/password error handling doesn't check blank fields properly

你好 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);
                  }
                }
              },

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

考虑在 email.isEmptypassword.isEmpty 时添加检查以捕获这些事件,或者将 emailpassword 字符串初始化为 ""第一名。通过这种方式,您可以确保它们不会是 null,并且您只需在代码和所有内容中将 email == null 替换为 email.isEmpty 并将 password == null 替换为 password.isEmpty应该可以正常工作。