# #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(() {});
}
Скриншот базы данных
Любая помощь была бы весьма признательна, так как я застрял, пытаясь исправить это в течение двух недель.
НБ: У меня всего несколько месяцев с Флаттером, спасибо!
Комментарии:
1. Что вы подразумеваете под «при входе в систему пользователь возвращает данные профиля другой учетной записи»?? Вы уверены, что вошли в систему с правильной учетной записью?
2. Ну, меня уведомляют о том, что я вошел в систему (в консоли отладки), но, похоже, при входе в систему у меня нет возможности вернуть документ, соответствующий вошедшему пользователю. Определенно есть шаг, который я пропускаю, но не знаю, где именно.
3. Вы пытались проверить значение UID аутентифицированного пользователя? Являются ли эти ценности одинаковыми?
4. Да, я использую
FirebaseAuth _auth = FirebaseAuth.instance; final uid = _auth.currentUser!.uid;
, но это не соответствует идентификатору документа зарегистрированного пользователя.5. Почему ты так говоришь?
Ответ №1:
Я думаю, вам следует уделять больше внимания тому, как вы обновляете данные в firestore, а не тому, как вы запрашиваете данные. Если произойдет что-то не так с вашей загрузкой или произойдет путаница в загружаемых общих данных, вы можете в конечном итоге поместить данные туда, где им не место, и, следовательно, получить неправильные данные.
Сначала проверьте код загрузки.