Как сделать однократный простой запрос с Firebase Firestore? - PullRequest
0 голосов
/ 28 февраля 2020

В Dart / Flutter и обучении Firebase Firestore ... Я использую следующий метод для тестирования перед созданием пользовательского интерфейса:

_testFireStore() async {
  var result = Firestore.instance
      .collection('users')
      .where('uid', isEqualTo: 'IvBEiD990Vh0D9t24l2GCCdsrAf1')
      .snapshots();

  await for (var snapshot in result) {
    for (var user in snapshot.documents) {
      print('main.DEBUG: ' + user.data.toString());
    }
  }
}

Он работает как положено - оператор print выполняется изначально, , но также и в режиме реального времени каждый раз, когда любое поле обновляется в документе в базе данных Firestore .

Как можно изменить этот код так, чтобы снимок был получен только один раз, а не " подписаны / прослушаны "на ... и, таким образом, мы не тратим пропускную способность на нежелательные / ненужные данные, а оператор печати выполняется только один раз?

Ответы [ 2 ]

1 голос
/ 28 февраля 2020

Firestore.instance.collection(...).where(...) возвращает объект Query . У него есть метод с именем getDocuments () , который выполняет запрос и дает вам будущее с единственным набором результатов.

var query = Firestore.instance
    .collection('users')
    .where('uid', isEqualTo: 'IvBEiD990Vh0D9t24l2GCCdsrAf1');
query.getDocuments().then((QuerySnapshot snapshot) {
    // handle the results here
})

Или используйте await для получения QuerySnapshot, поскольку getDocumets() возвращает будущее.

0 голосов
/ 28 февраля 2020

Используйте getDocuments(), чтобы получить все документы за один раз:

_testFireStore() async {
  var result = await Firestore.instance
      .collection('users')
      .where('uid', isEqualTo: 'IvBEiD990Vh0D9t24l2GCCdsrAf1')
      .getDocuments();
      print(result.documents.toString());
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...