#firebase #flutter #firebase-authentication
# #firebase #флаттер #firebase-аутентификация
Вопрос:
Недавно я обновил firebase auth до последней версии. С тех пор у меня возникла следующая проблема:
Метод ‘then’ не определен для типа ‘User’.
Я очень благодарен за любую помощь!
Это мой код:
Future setUserData(Map<String, dynamic> userData) async {
await FirebaseAuth.instance.currentUser.then(
(User user) async {
await FirebaseFirestore.instance
.collection("Users")
.doc(user.uid)
.set(userData, SetOptions(merge: true),);
},
);
}
Комментарии:
1. вы ожидаете, а также используете then. вы можете либо подождать, либо сохранить его асинхронным, используя then .
Ответ №1:
Согласно документации API, CurrentUser — это просто свойство, которое содержит объект User, или null . Это не обещание, поэтому вы не можете вызвать then
его и не можете его ожидать. Просто обратитесь к нему напрямую и обязательно проверьте наличие null перед его использованием.
Future setUserData(Map<String, dynamic> userData) async {
User user = FirebaseAuth.instance.currentUser;
if (user != null) {
await FirebaseFirestore.instance
.collection("Users")
.doc(user.uid)
.set(userData, SetOptions(merge: true));
}
else {
// decide what you want to do if there is no currentUser object.
}
}
Ответ №2:
Вы можете найти возможное решение ниже:
Future<void> setUserData(Map<String, dynamic> userData) async {
User user = await FirebaseAuth.instance.currentUser;
if (user != null) {
await FirebaseFirestore.instance
.collection("Users")
.doc(user.uid)
.set(userData, SetOptions(merge: true));
} else {
// user is not logged in
}
}
Ответ №3:
Насколько я знаю, вы можете использовать либо ключевые слова async и await, либо ключевое слово then!
Я предполагаю, что это должно быть просто отлично.
setUserData(Map<String, dynamic> userData) async {
FirebaseAuth.instance.currentUser.then(
(User user) async {
await FirebaseFirestore.instance
.collection("Users")
.doc(user.uid)
.set(userData, SetOptions(merge: true),);
},
);
}