Flutter Firestore: Потоковый конструктор, возвращающий данные из разных пользовательских документов

# #firebase #flutter #google-cloud-firestore #firebase-authentication

Вопрос:

У меня возникла небольшая проблема с возвратом пользовательских данных из разных документов, т. Е. При входе в систему пользователь возвращает данные профиля другой учетной записи. Как я могу вернуть пользовательские данные соответствующим учетным записям?

Мой код:

 FirebaseAuth _auth = FirebaseAuth.instance;
final uid = _auth.currentUser!.uid;
  final Stream<DocumentSnapshot<Map<String, dynamic>>> db = FirebaseFirestore
      .instance
      .collection('users')
      .doc(uid)
      .collection('Profile')
      .doc('Personal details')
      .snapshots();



                     Row(
                      mainAxisAlignment: MainAxisAlignment.spaceBetween,
                      children: [
                        Text('First name'),
                        SizedBox(width: 40),
                        StreamBuilder<DocumentSnapshot>(
                          stream: db,
                          builder: (BuildContext context,
                              AsyncSnapshot<DocumentSnapshot> snapshot) {
                            if (snapshot.hasError)
                              return Text('Something went wrong');
                            if (snapshot.connectionState ==
                                ConnectionState.waiting)
                              return CircularProgressIndicator();

                            dynamic data = snapshot.data!.data();
                            return Text(data['First name']);
                            // return Text('First name', style: boldFont);
                          },
                        ),
                      ]),
                  Divider(color: Colors.black),
                  SizedBox(
                    height: 10,
                  ),
                  Row(
                    mainAxisAlignment: MainAxisAlignment.spaceBetween,
                    children: [
                      Text('Last name'),
                      SizedBox(width: 40),
                      StreamBuilder<DocumentSnapshot>(
                        stream: db,
                        builder: (BuildContext context,
                            AsyncSnapshot<DocumentSnapshot> snapshot) {
                          if (snapshot.hasError)
                            return Text('Something went wrong');
                          if (snapshot.connectionState ==
                              ConnectionState.waiting)
                            return CircularProgressIndicator();

                          dynamic data = snapshot.data!.data();
                          return Text(data['Last name'], style: boldFont);
                          // return Text('Last name', style: boldFont);
                        },
                      ),
                    ],
                  ),
 

Для выхода из системы

 onPressed: () async {
                        try {
                          await FirebaseAuth.instance.signOut();
                          errorMessage = '';
                        } on FirebaseAuthException catch (error) {
                          errorMessage = error.message!;
                        }
                        Navigator.of(context).pushReplacementNamed('/signIn');
                        setState(() {});
                      }
 

Скриншот базы данных

база данных firestore

Любая помощь была бы весьма признательна, так как я застрял, пытаясь исправить это в течение двух недель.

НБ: У меня всего несколько месяцев с Флаттером, спасибо!

Комментарии:

1. Что вы подразумеваете под «при входе в систему пользователь возвращает данные профиля другой учетной записи»?? Вы уверены, что вошли в систему с правильной учетной записью?

2. Ну, меня уведомляют о том, что я вошел в систему (в консоли отладки), но, похоже, при входе в систему у меня нет возможности вернуть документ, соответствующий вошедшему пользователю. Определенно есть шаг, который я пропускаю, но не знаю, где именно.

3. Вы пытались проверить значение UID аутентифицированного пользователя? Являются ли эти ценности одинаковыми?

4. Да, я использую FirebaseAuth _auth = FirebaseAuth.instance; final uid = _auth.currentUser!.uid; , но это не соответствует идентификатору документа зарегистрированного пользователя.

5. Почему ты так говоришь?

Ответ №1:

Я думаю, вам следует уделять больше внимания тому, как вы обновляете данные в firestore, а не тому, как вы запрашиваете данные. Если произойдет что-то не так с вашей загрузкой или произойдет путаница в загружаемых общих данных, вы можете в конечном итоге поместить данные туда, где им не место, и, следовательно, получить неправильные данные.

Сначала проверьте код загрузки.