.uid: получатель uid не определен для типа UserCredential. - Flutter, FirebaseAuth

Мой .uid говорит: «uid» геттера не определен для типа «UserCredential».

Мой код:

 import 'package:firebase_auth/firebase_auth.dart';
 
 class AuthService {   final FirebaseAuth _firebaseAuth =
 FirebaseAuth.instance;
 
   Stream<String> get onAuthStateChanged =>
 _firebaseAuth.authStateChanges().map(
         (User user) => user?.uid,
       );
 
   Future<String>
 createUserWithEmailAndPassword(
       String email, String password, String name) async {
     final currentUser = await _firebaseAuth.createUserWithEmailAndPassword(
       email: email,
       password: password,
     );
 
     var updateInfo = UserUpdateInfo();
     await FirebaseAuth.instance.currentUser.updateProfile(displayName:name);
     await FirebaseAuth.instance.currentUser.reload();
     return FirebaseAuth.instance.currentUser.uid;   }
 
 Future<String>
 signInWithEmailAndPassword(
       String email, String password) async {
     return (await _firebaseAuth.signInWithEmailAndPassword(
             email: email, password: password))
         .uid;   }
 
   signOut() {
     return _firebaseAuth.signOut();   } }
 
 class UserUpdateInfo { }

Как я могу это исправить? Спасибо!


person danielalakin    schedule 17.02.2021    source источник
comment
Привет, даниелалакин. Вы чего-нибудь добились с этим? Я пытаюсь помочь с ответом ниже. Ты это видел? Имел ли это смысл? Если мой ответ был полезен, нажмите кнопку «Проголосовать» (▲) слева от него. Если он ответил на ваш вопрос, нажмите галочку (✓), чтобы принять его. Таким образом, другие узнают, что вам (достаточно) помогли. Также см. Что мне делать, когда кто-то ответит на мой вопрос?   -  person Frank van Puffelen    schedule 21.02.2021


Ответы (1)


Метод signInWithEmailAndPassword возвращает UserCredential объект, который (как сообщение об ошибке говорит) не имеет свойства uid. Чтобы получить UID из UserCredential, вы делаете credential.user.uid.

Ты ищешь:

await (_firebaseAuth.signInWithEmailAndPassword(email: email, password: password)).user.uid

Или немного более читаемым, если разбросать по двум строкам / операторам:

var credentials = await _firebaseAuth.signInWithEmailAndPassword(email: email, password: password);
return credentials.user.uid
person Frank van Puffelen    schedule 17.02.2021