Как я могу отобразить в виджете текущие пользовательские данные из Firebase в Flutter

#firebase #flutter

#firebase #flutter

Вопрос:

Как отобразить данные, предоставленные текущим пользователем, в виджете? Я уже пробовал с StreamBuilder и FutureBuilder и nada.

Данные пользователей Firebase

Экран, на котором должны отображаться текущие пользовательские данные

Я мог бы отобразить данные (страна, имя пользователя, адрес электронной почты, пароль) из первого документа 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), у вас будет чистый код, и вы сможете решать проблемы очень быстро и чисто. И если вам нравится мой ответ, пожалуйста, нажмите кнопку «Этот ответ полезен».