Provider/ChangeNotifier: Widget构建后设置状态

Provider/ChangeNotifier: Set state after Widget is build

我正在使用 Provider/ChangenNotifier 模式来处理状态 in the official docs

我有一个状态字段,我想在构建小部件后设置它。但是,如果我尝试在构建方法中设置。我得到一个错误:

setState() or markNeedsBuild() called during build.

我在哪里可以这样调用:

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

你不能在构建过程中设置状态,如果你想测试状态的变化,把这段代码 state.field = 'new Val'; 放在按钮事件中,比如 FloatActionButton 或构建完成后的事件(使用 Future.delayed 或添加 post fram 回调,参见

警告 如果您在 state.field 集合中调用 notifyListeners(),并使用提供程序监听小部件中的更改,这将导致无限循环重建...这是您无法在构建期间设置状态的另一个原因...