Необходимо указать адрес электронной почты / Адрес электронной почты плохо отформатирован

#flutter #dart #authentication

Вопрос:

Я получаю «флаттер: [firebase_auth/отсутствует-электронная почта] Должен быть указан адрес электронной почты». когда я зарегистрируюсь. Используется dummy@gmail.com

И «флаттер: [firebase_auth/неверный-email] Адрес электронной почты плохо отформатирован». когда я войду в систему с зарегистрированной учетной записью. (ранее у меня было электронное письмо, которое работало, и я также создал учетную запись на веб-сайте firebase, получите один и тот же msg для обоих)

Я рассматривал trim() как возможное решение, но не знаю, как его реализовать. Я убедился, что там не было пробелов… не могли бы вы, пожалуйста, сказать мне, что не так или отсутствует в моем коде?

Вот код с моей страницы регистрации (выглядит почти так же на моей странице входа), дайте мне знать, если вам нужно увидеть больше

   String email = '';
  String password = '';
  String error = '';
 
 TextFormField(
                        textInputAction: TextInputAction.next,
                        style: TextStyle(color: Colors.white),
                        decoration: textInputDecoration.copyWith(
                          hintText: ('Enter Email'),
                          hintStyle: TextStyle(color: Colors.white),
                          enabledBorder: UnderlineInputBorder(
                            borderSide: BorderSide(color: Colors.white),
                          ),
                        ),
                        keyboardType: TextInputType.emailAddress,
                        validator: (value) {
                          if (value!.isEmpty) {
                            return 'Email is required';
                          }
                          if (value.isNotEmpty) {
                            final RegExp regex = RegExp(
                                r'^(([^<>()[]\.,;:s@"] (.[^<>()[]\.,;:s@"] )*)|(". "))@(([[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}])|(([a-zA-Z-0-9] .) [a-zA-Z]{2,}))

 ElevatedButton(
                          child: Text(
                            'Register',
                            style: TextStyle(color: Colors.white),
                          ),
                          style: ElevatedButton.styleFrom(
                              primary: Color(0xFF162242)),
                          onPressed: () async {
                            if (_formKey.currentState!.validate()) {
                              setState(() => loading = true);
                              dynamic result =
                                  await _auth.registerWithEmailAndPassword(
                                      email, password);

                              if (result == null) {
                                setState(() {
                                  error = 'please enter valid email';
                                  loading = false;
                                });
                              }
                            }
                          }),
 

Ответ №1:

Подожди, мне интересно, что ты на самом деле делаешь, тхо!

Вы явно определили адрес электронной почты и пароль как пустые строки.

  String email = '';
 String password = '';
 String error = '';
 

И передать эти пустые строки в _auth.registerWithEmailAndPassword(email, password) ?

Решением было бы использовать объекты TextEditingController и собирать значения из полей ввода, а затем передавать их методу регистрации.

 final emailCtrl =TextEditingController();
final passCtrl = TextEditingController();

...

TextFormField(
  controller: emailCtrl,
  ....
),

TextFormField(
  controller: passCtrl,
  ....
),

...


ElevatedButton(
  onPressed: () async {
    String email = emailCtrl.text.trim();
    String pass = passCtrl.text.trim();
    ...
    dynamic result = await _auth.registerWithEmailAndPassword(email, password);
    ...
  }
)
 

Комментарии:

1. Спасибо!! Я могу войти и зарегистрироваться прямо сейчас! Кроме того, я получил отсюда пустые строки, объясняет он в 5:19 youtube.com/... похоже, сейчас я использую его только для паролей. Я еще не до конца понимаю, я новичок в аутентификации 😛

2. Понял, так как это учебник для начинающих, он просто объясняет это. Смотрите 6:17. youtu.be/... Он обновляет переменную электронной почты с onChanged обратным вызовом на TextFormField

);
if (!regex.hasMatch(value))
return 'Enter a valid email';
else
return null;
} else {
return 'Enter a valid email';
}
},
),


Ответ №1:

Подожди, мне интересно, что ты на самом деле делаешь, тхо!

Вы явно определили адрес электронной почты и пароль как пустые строки.


И передать эти пустые строки в _auth.registerWithEmailAndPassword(email, password) ?

Решением было бы использовать объекты TextEditingController и собирать значения из полей ввода, а затем передавать их методу регистрации.


Комментарии:

1. Спасибо!! Я могу войти и зарегистрироваться прямо сейчас! Кроме того, я получил отсюда пустые строки, объясняет он в 5:19 youtube.com/… похоже, сейчас я использую его только для паролей. Я еще не до конца понимаю, я новичок в аутентификации 😛

2. Понял, так как это учебник для начинающих, он просто объясняет это. Смотрите 6:17. youtu.be/… Он обновляет переменную электронной почты с onChanged обратным вызовом на TextFormField