Provider/ChangeNotifier: установить состояние после сборки виджета

Я использую шаблон Provider/ChangenNotifier для обработки состояния, как описано в официальных документах.

У меня есть поле состояния, которое я хочу установить после создания виджета. Однако, если я попытаюсь установить метод сборки. Я получаю сообщение об ошибке:

setState() или markNeedsBuild() вызывается во время сборки.

Куда я могу позвонить примерно так:

var state = Provider.of<StateModel>(context);
state.field = 'new Val';

1 ответ

Решение

Вы не можете установить состояние во время сборки, если вы хотите протестировать изменение состояния, поместите этот код state.field = 'new Val'; внутри события кнопки, например FloatActionButtonили событие после завершения сборки (с Future.delayed или добавлением обратного вызова post fram, см. Есть ли какой-либо обратный вызов, чтобы сообщить мне, когда функция "build" выполняется во Flutter?)

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

Другие вопросы по тегам