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 и прослушивания изменений в вашем виджете с помощью провайдера. Это вызовет бесконечный цикл перестройки... это еще одна причина, по которой вы не можете установить состояние во время сборки...