Обработка ошибок электронной почты / пароля Flutter Firebase не проверяет пустые поля должным образом - PullRequest
2 голосов
/ 01 марта 2020

Привет Флаттер newb ie здесь! Я настроил часть проверки логина и ошибок.

Я хочу провести некоторую проверку полей, но я понимаю, что если пользователь выполняет следующее поведение, мой код для проверки ошибок не будет работать:

  1. введите текст в текстовое поле электронной почты
  2. введите текст в текстовое поле пароля
  3. нажмите клавишу Backspace, чтобы удалить текст в текстовом поле электронной почты
  4. нажмите плоскую кнопку для отправки

код будет проходить проверку if и go впереди для входа ... но я подумал, что к моменту нажатия кнопки текстовое поле электронной почты пустое, оно все равно должно следовать проверке 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);
                  }
                }
              },

1 Ответ

1 голос
/ 01 марта 2020

Похоже, что когда пользователь даже не коснулся текстовых полей имени пользователя или пароля, строки email и password равны нулю. Но если пользователь что-то набирает (следовательно, изменяет строки email и password), а затем стирает то, что он набрал, строки не будут null, они будут равны пустой строке "", то есть отличается от null. Следовательно, ваш поток управления будет прыгать прямо к последнему else, который у вас там есть, а это не то, что вам нужно.

Рассмотрите возможность добавления проверок, когда email.isEmpty или когда password.isEmpty для захвата этих событий, или Инициализация ваших email и password строк до "". Таким образом вы убедитесь, что они не будут null, и вам просто нужно заменить email == null на email.isEmpty и password == null на password.isEmpty в вашем коде, и все должно работать нормально.

...