Метод ‘then’ не определен для типа ‘User’ (firebase_auth: ^0.18.4 1)

#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),);
     },
     );
  }