#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