Как восстановить определенные данные в хранилище пожаров?

У меня в базе есть такая структура:

введите описание изображения здесь

У меня есть функция, которая возвращает текущего зарегистрированного пользователя

 FirebaseAuth auth = FirebaseAuth.instance;
 auth.currentUser.uid;

И я хочу получить реквизиты, когда idUser == auth.currentUser.uid;

По сути, пользователь получает запросы, созданные им самим.

Это мой StreamBuilder

final _controller = StreamController<QuerySnapshot>.broadcast();
FirebaseFirestore db = FirebaseFirestore.instance;

StreamBuilder<QuerySnapshot> addListenersRequests() {
final stream = db
    .collection("requisicoes")
    .where("usuario.idUser", isEqualTo: idUsuarioLogado)
    .snapshots();


stream.listen((dados) {
  _controller.add(dados);
});
return null;

}

Примечание: idUsuarioLogado правильно возвращает currentUser

Проблема в том, что я получаю все в коллекции реквизитов, когда я создаю нового пользователя, запросы других пользователей появляются на экране

есть ли логическая проблема в StreamBuilder?


person Lucas Baggio    schedule 15.02.2021    source источник


Ответы (2)


Что касается вашей проблемы, я думаю, вы извлекаете данные своего текущего зарегистрированного uid. Но вы хотите получить подробную информацию о созданных пользователях партикулов (т. Е. documendId). Затем вам нужно сначала получить documentId.

body: StreamBuilder(
          stream:users.snapshots(),
          builder: (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot) {

            if (snapshot.connectionState == ConnectionState.waiting) {
              return Center(
                child: CircularProgressIndicator(),
              );
            }

            if(!snapshot.hasData){
              return Center(
                child: CircularProgressIndicator(),
              );
            }

            return ListView(
                children: snapshot.data.documents.map((document) {
              return  Center(
                child: Container(
                  width:  MediaQuery.of(context).size.width/2.5,
                  height: MediaQuery.of(context).size.height/5,
                  child:  Text(document.id),

                ),
              );
            }).toList());
          }),

Вам необходимо получить document.id. Это ваш частный пользователь, а не этот.

FirebaseAuth auth = FirebaseAuth.instance;
 auth.currentUser.uid;

Примечание. Будет возвращен текущий зарегистрированный userId.

Для получения дополнительных сведений перейдите по этой ссылке.

person Rahul Kushwaha    schedule 15.02.2021
comment
Спасибо за ответ, Рахул, на самом деле я хочу получить данные текущего зарегистрированного uid. Я не уверен, потому что я некоторое время не смотрел этот проект, но я помню, что я правильно извлекаю данные - person Lucas Baggio; 15.02.2021
comment
Чтобы вы лучше понимали приложение, это приложение для создания отчетов, когда пользователь создает новый отчет, я связываю поле idUser с вашим текущим зарегистрированным uid. - person Lucas Baggio; 15.02.2021
comment
Тогда ... есть ли ошибка именно в этом пункте? .where (usuario.idUser, isEqualTo: idUsuarioLogado) - person Lucas Baggio; 15.02.2021
comment
@LucasBaggio Я понимаю вашу проблему. Я изучаю ваш код. Ошибок не обнаружил. - person Rahul Kushwaha; 15.02.2021
comment
@LucasBaggio Пожалуйста, понизьте версию своего пакета firestore в puspec и попробуйте еще раз. Как cloud_firestore: ^ 0.14.3 + 1. У меня возникали проблемы того же типа в последних версиях StreamBuilder. - person Rahul Kushwaha; 15.02.2021
comment
И перейдите по этой ссылке petercoding.com/firebase/2020 / 04/04 / - person Rahul Kushwaha; 15.02.2021
comment
Позвольте нам продолжить это обсуждение в чате. - person Lucas Baggio; 15.02.2021

Я нашел здесь ответ Firestore игнорирует где предложение в запросе во флаттере

Мой пример такой же, как и ссылка выше, у меня есть две функции, одна addListenersRequests(), а другая getCurrentUser(), эти две функции, которые я вызывал в методе initState, проблема в том, что getCurrentUser является асинхронным, поэтому сначала выполнялся addListenersRequests (), перед заполнением значения переменной idUsuarioLogado.

Итак, я объединил две функции в одну, чтобы сначала можно было выполнить getCurrentUser.

Окончательный код:

Future<StreamBuilder<QuerySnapshot>> addListenersRequests() async{

await getDataUser();

final stream = db
    .collection("requisicoes")
    .where("usuario.idUser", isEqualTo: idUsuarioLogado)
    .snapshots();

stream.listen((dados) {
  _controller.add(dados);
});
return null;

}

Теперь все работает правильно.

Странная вещь в этой истории заключается в том, что firebase выполняет предложение и извлекает все в коллекции, даже если указанная переменная равна нулю.

person Lucas Baggio    schedule 15.02.2021