У меня проблема с слишком большим количеством вызовов для получения данных для моего списка.
Вот что происходит (упрощенно).У меня есть служба, которая возвращает мне 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
предмета, будущее было вызвано, и предметы были повторно заполнены, которые мне не нужны.