#firebase #flutter
#firebase #flutter
Вопрос:
Как отобразить данные, предоставленные текущим пользователем, в виджете? Я уже пробовал с StreamBuilder и FutureBuilder и nada.
Экран, на котором должны отображаться текущие пользовательские данные
Я мог бы отобразить данные (страна, имя пользователя, адрес электронной почты, пароль) из первого документа Firebase, используя: docs[0] [‘country’], но это неправильно… Он должен отображать данные от текущего пользователя, а не всегда данные из первого документа.
Я уже пробовал ListView.builder(), но при прокрутке вниз вы увидите все данные в виде списка от всех пользователей, и это тоже неправильно.
Я с нетерпением жду ваших ответов. Заранее спасибо за помощь, ребята.
Ответ №1:
Насколько я понимаю, вы хотите получить данные о текущем или любом пользователе. Прежде всего, определите идентификатор пользователя, и вы сможете работать с этим кодом (я написал очень простой код для своего проекта, и вы можете применить его к своему коду.)
Это класс модели
class MyUser{
String snapshotId;
String userId;
String name;
MyUser({this.userId,this.snapshotId,this.name});
factory MyUser.fromSnaphot(DocumentSnapshot snapshot){
return MyUser(
snapshotId:snapshot.id,
userId:snapshot.data()['userId'],
name:snapshot.data()['name'],
);
}
Это класс обслуживания
final FirebaseFirestore _fBaseFireStore=FirebaseFirestore.instance;
CollectionReference _collectionRef;
UserService(){
_collectionRef=_fBaseFireStore.collection('Users');
}
Stream<MyUser> getUserFromUserId(String userId){
var ref=_collectionRef.where('userId',isEqualTo:userId);
return ref.snapshots().map((event) => MyUser.fromSnaphot(event.docs[0]));
}
Получить пользовательскую функцию
final UserService _userService = getIt<UserService>();
return _userService.getUserFromUserId(userId);
Комментарии:
1. Спасибо за помощь !, но я уже исправил это… однако я получаю сообщение badstate.
2. Пожалуйста, если вы примените эту архитектуру (Services, Model, ViewModel), у вас будет чистый код, и вы сможете решать проблемы очень быстро и чисто. И если вам нравится мой ответ, пожалуйста, нажмите кнопку «Этот ответ полезен».