Конвертировать FirebaseUser в пользовательский класс пользователя в потоке - PullRequest
1 голос
/ 28 апреля 2020

Я хочу преобразовать FirebaseUser в пользовательский класс, добавив несколько дополнительных полей в проект Flutter, который использует Firebase в качестве бэкэнда. Вот мой код:

Stream<User> get user {
// return _auth.onAuthStateChanged.map(_fromFirebaseUser);

final theUser = _auth.onAuthStateChanged.map((firebaseUser) {
  final result = Firestore.instance.collection("users")
    .document(firebaseUser.uid).snapshots().map((snapshot) { 
       return User(
         uid: user.uid,
         name: snapshot.data['name'],
         email: user.email,
         age: snapshot.data['age'],
         gender: snapshot.data['gender'] 
      );
   }
   return result;
  });
  return theUser;
}

Основная идея c заключается в том, что я получу данные из коллекции пользователей и заполню модель User. Но я получил следующее сообщение об ошибке:

Тип аргумента «Поток» нельзя назначить типу параметра «Поток».

Нужен ваш совет о том, как вернуть Stream<User> вместо Stream<Stream<User>>. Спасибо.

1 Ответ

2 голосов
/ 28 апреля 2020

В этом случае вы используете 2 потока: _auth.onAuthStateChanged и Firestore.instance.collection("users").document(firebaseUser.uid).snapshots(). Вам нужно либо объединить его, либо просто асинхронно получить пользовательский документ из коллекции вместо прослушивания потока:

Stream<User> get user {
  return _auth.onAuthStateChanged.asyncMap((firebaseUser) async {
    final snapshot = await Firestore.instance
        .collection("users")
        .document(firebaseUser.uid)
        .get();
    return User(
        uid: firebaseUser.uid,
        name: snapshot.data['name'],
        email: firebaseUser.email,
        age: snapshot.data['age'],
        gender: snapshot.data['gender'] 
    );
  });
}

Обратите внимание на использование asyncMap вместо map, чтобы разрешить асинхронную выборку документов .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...