我使用Provider / ChangenNotifier模式来处理状态,如in the official docs所述。
我有一个状态字段,要在构建小部件后设置。但是,如果我尝试在build方法中进行设置。我收到错误消息:
在构建过程中调用setState()或markNeedsBuild()。
我在哪里可以这样称呼:
var state = Provider.of<StateModel>(context);
state.field = 'new Val';
答案 0 :(得分:2)
您无法在构建期间设置状态,如果要测试状态变化,请将此代码state.field = 'new Val';
放在按钮事件(例如FloatActionButton
)或构建完成后的事件(带有Future.delayed或添加postfram回调,请参见Is there any callback to tell me when "build" function is done in Flutter?)
警告:如果您在state.field集合中调用notifyListeners()
,并使用提供程序监听小部件中的更改,则将导致无限的重建周期...这是另一个无法在构建期间设置状态的原因...