Provider / ChangeNotifier: установить состояние после сборки виджета - PullRequest
0 голосов
/ 16 февраля 2020

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

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

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

Где я могу вызвать что-то вроде:

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

1 Ответ

2 голосов
/ 18 февраля 2020

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

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

...