Флаттер: чтение большого количества узлов в Firebase - PullRequest
0 голосов
/ 19 декабря 2018

Я пытаюсь прочитать данные из Firebase, и они не работают с большим количеством узлов,

Вот что я попробовал:

  Future<int> test() async {
     final response = await FirebaseDatabase.instance.reference().child('...').once();
     var urls=[];
     response.value.forEach((v) => urls.add(v));
     print(urls);
     return urls.length;
  }

Результат:

Хорошо работает с некоторыми тестовыми данными.Пример:

enter image description here

enter image description here

, но если я пытаюсь прочитать 90 узлов, пример:

enter image description here

Результат:

(динамический) => void 'не является подтипом типа'(динамический, динамический) => void' из 'f

enter image description here

Есть идеи?


NEW

Я обнаружил, что если ключ, например:

-LU645_UgPbGZhBsneOq

(автогенерируется облачной функцией с использованием .push (). set ())

, тогда она не работает.

Более подробно: если ключ не числовой,тогда это не работает

enter image description here

Почему?

1 Ответ

0 голосов
/ 16 июля 2019

Если вы используете имена узлов, заданные с помощью push, то значение, возвращаемое Once (). Value - это Map.Таким образом, для итерации по нему с помощью foreach нужна функция, принимающая два аргумента вместо одного (именно это и говорит вам сообщение об ошибке):

response.value.forEach ((динамический ключ, динамический v) => urls.add (v))

это должно дать вам в URL список карт с именем и ключом url.Параметром «ключ» в функции foreach будет имя узла, содержащее имя и URL.

Почему однозначная функция foreach работает с числовыми именами узлов?Если вы назначите числовые имена узлов, firebase вернет эти узлы в виде массива.Поскольку в ваших образцах деревьев отсутствует узел «0», вы получаете «ноль» в качестве первого элемента массива.

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