Флаттер ждет завершения Firestore - PullRequest
0 голосов
/ 21 марта 2020

Я использую флаттер с firebase для создания приложения. Функция ниже получает некоторые данные из моей базы данных firebase, но проблема в том, что получение данных занимает слишком много времени. Как можно убедиться, что приложение ожидает, пока firebase передаст данные до конца sh, прежде чем продолжить?

Я хотел бы сделать что-то вроде ожидания, но я не знаю, смогу ли я сделать:

await Firestore.instance...

Код:

  void getData() {

    Firestore.instance
        .collection('collection')
        .document('document')
        .get()
        .then((DocumentSnapshot ds) {

          var count = ds.data.length;
          for(var i = 0; i < count; i ++){
            Firestore.instance
                .collection('collection')
                .document('document')
                .get()
                .then((DocumentSnapshot dss) {
                // do something

            });
          }
    });
  }

Ответы [ 2 ]

1 голос
/ 21 марта 2020

Чтобы использовать await, вы должны сделать свою функцию асинхронной c:

Future<void> getData() async {

Тогда да, вы можете сделать

var result = await Firestore.instance.collection...

вместо обработки результата Future в затем () обратный вызов. Следующая строка не будет выполнена, пока не решено будущее.

0 голосов
/ 21 марта 2020

Вам нужно будет дождаться, пока пожарный магазин вернет данные. и затем верните его.

Future getData() async {
  DocumentSnapshot ds = await Firestore.instance
      .collection('collection')
      .document('document')
      .get();
  final data = ds.//do something with document snapshot

  return data;
}

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...