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

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

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

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

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

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

person ynotu.    schedule 16.02.2020    source источник
comment
Назовите это дочерней сборкой.   -  person Kahou    schedule 16.02.2020
comment
Не могли бы вы привести для этого пример?   -  person ynotu.    schedule 16.02.2020
comment
Может полный код показать?   -  person Kahou    schedule 16.02.2020


Ответы (1)


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

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

person Renê Guilherme Nucci    schedule 18.02.2020