Флаттер связывает динамические списки с StatefulWidget - PullRequest
0 голосов
/ 03 октября 2018

У меня проблема с слишком большим количеством вызовов для получения данных для моего списка.

Вот что происходит (упрощенно).У меня есть служба, которая возвращает мне List<T>, где T - простой объект с несколькими атрибутами (заголовок, цвет, ключ, ...).

Тогда у меня есть StatefulWidget, где в Widget build() метод Я вызываю API для возврата данных следующим образом:

Widget build(BuildContext context) {
    _masterCategories = _masterCategories ??
        StaticListService.getItems(StaticItemType.masterCategory, context);

Наконец, я связываю этот массив с виджетом Wrap, который отображает массив элементов Chip:

Wrap(
    spacing: 8.0,
    runSpacing: 4.0,
    children: _masterCategories
        .map((item) => _generateSimpleChip(context, item))
        .toList()),

ОК, все отлично работает!Однако есть небольшая проблема, с которой я сталкиваюсь, когда я нажимаю на определенный элемент Chip и выбираю его (у меня есть простой Set<String>, который используется для отслеживания всех выбранных фишек), что происходит, очевидно, что мой *Метод 1019 * перестраивается.

Это, однако, повторно вызывает мой метод API для извлечения элементов, которые, я знаю, будут идентичны для текущей страницы (если я не покину текущую страницу и не вернусь назад, яможет гарантировать, что элементы не изменятся).

Я попытался заполнить мой List<T> в методе initState (), который, однако, выдал ошибку:

inheritFromWidgetOfExactType (_LocalizationsScope) былвызывается до завершения _DetailPageComponentState.initState ()

Как вы можете видеть в моем коде (первый блок кода), я включил проверку, которая проверяет, содержит ли массив значения, и если нет, то выбирает значения изAPI.

Вопрос:
Я хотел знать, есть ли лучший способ, как это сделать?Я уже попробовал FutureBuilder, но результат был тот же -> после изменения состояния моего chip предмета, будущее было вызвано, и предметы были повторно заполнены, которые мне не нужны.

...