Gentlfolk, спасибо за помощь.
Предложение julemand101 об использовании Future.wait () привело меня к ответу.
Это также помогло мне лучше понять проблему.
Я сделал новую суть, которая более точно показывает, что я пытался сделать.
По существу, когда мы делаем запрос БД по сети, мы получаем сущность обратно. Проблема в том, что у сущности часто будут ссылки на другие сущности. Это может закончиться целым деревом сущностей, которые необходимо вернуть. Часто вам не нужны никакие из этих сущностей.
Таким образом, решение, к которому мы пошли, состоит в том, чтобы возвращать только идентификатор базы данных каждой дочерней сущности (только непосредственных потомков).
Мызатем сохраните эти идентификаторы в классе RefId (см. ниже).
RefId - это, по сути, future
, который имеет идентификатор сущности и знает, как извлечь сущность из БД.
Когда нам действительно необходим доступ к дочерней сущности, мы заставляем RefId:завершить (т.е. извлечь объект через границу сети). У нас есть целая схема кэширования, позволяющая поддерживать эту производительность, а также возможность принудительного извлечения дочерних элементов в рамках родительского запроса, где мы заранее знаем, что они будут необходимы.
Параметры в моемПримером по сути являются пункты меню, которые необходимо отсортировать. Но, конечно, я не могу отсортировать их, пока они не будут найдены. Итак, переписанный пример и ответ:
https://dartpad.dartlang.org/369e71bb173ba3c19d28f6d6fec2072a
Вот фактический класс IdRef, который мы используем:
https://dartpad.dartlang.org/ba892873a94d9f6f3924436e9fcd1b42
Это сейчасесть статический метод resolveList
, чтобы помочь с этим типом проблемы.
Спасибо за вашу помощь.