# #firebase #flutter #google-cloud-firestore #flutter-web
Вопрос:
Я работаю над страницей регистрации для веб-приложения. Приведенный ниже код показывает, как я пытаюсь аутентифицировать пользователей, а также добавлять их данные в cloud firestore. Однако я получаю сообщение об ошибке, в котором говорится, что что-то равно нулю, даже если я правильно заполняю информацию о регистрации.
Я предполагаю, что ошибка происходит из блока try/catch в нижней части. Я следил за документами на веб-сайте flutterfire, чтобы добавить пользовательские данные в базу данных cloud firestore (https://firebase.flutter.dev/docs/firestore/usage).
Кроме того, какой был бы лучший способ реализовать функцию addUser (), чтобы избежать ошибок?
вот мой код:
class SignUpPage extends StatefulWidget {
@override
_SignUpPageState createState() => _SignUpPageState();
}
class _SignUpPageState extends State<SignUpPage> {
FirebaseAuth auth = FirebaseAuth.instance;
final emailController = TextEditingController();
final passwordController = TextEditingController();
final nameController = TextEditingController();
User? firebaseUser = FirebaseAuth.instance.currentUser;
@override
Widget build(BuildContext context) {
CollectionReference firestoreData =
FirebaseFirestore.instance.collection('users');
Future<void> addUser() {
return firestoreData
.add({
'email': emailController.text,
'name': nameController.text,
'login_UID': firebaseUser!.uid,
'isCounselor': false,
})
.then((value) => print("User Added"))
.catchError((error) => print("Failed to add user: $error"));
}
return Scaffold(
body: Container(
padding: EdgeInsets.all(300),
child: Column(
children: [
TextField(
controller: nameController,
decoration: InputDecoration(labelText: 'Prénom'),
),
TextField(
controller: emailController,
decoration: InputDecoration(labelText: 'Email'),
),
TextField(
controller: passwordController,
decoration: InputDecoration(labelText: 'Mot de Passe'),
),
SizedBox(
height: 30,
),
MaterialButton(
child: Text('Sign up'),
onPressed: () async {
try {
UserCredential userCredential = await FirebaseAuth.instance
.createUserWithEmailAndPassword(
email: emailController.text,
password: passwordController.text);
addUser();
} on FirebaseAuthException catch (e) {
if (e.code == 'weak-password') {
print('The password provided is too weak.');
} else if (e.code == 'email-already-in-use') {
print('The account already exists for that email.');
}
} catch (e) {
print(e);
}
Navigator.pushNamed(context, '/login');
},
),
],
)),
);
}
}
Комментарии:
1. В чем заключается фактическая ошибка? Вы использовали консоль. войдите в журнал или другое, чтобы увидеть , что значения, которые вы «знаете», не являются нулевыми? Сорок лет опыта отладки: вы не «знаете» ничего, чего бы вы только что не видели! Просто потому, что вы «знаете», что это «должно» работать, не значит, что это так.
2. Я ничего не регистрировал в консоли. Я не совсем уверен, что это значит. Ошибка отображается в окне Android studio «выполнить». Ошибка возникает в строке catch(e) в конце фрагмента кода. Я опубликовал этот вопрос вчера, и по какой-то причине он работает сегодня утром. Тем не менее, спасибо вам за вашу помощь! Как вы сказали, я не должен предполагать, что я «знаю», пока не увижу.