我已阅读与此问题相关的所有问题,但它们都与我的不同。
我有两个页面:主页和设置页面。在主页上,我用 . 监听提供者的变化Consumer
。在设置页面中,我不听更改:
class _SettingsState extends State<Settings> {
StatesProvider states;
@override
void initState() {
states = Provider.of<StatesProvider>(context, listen: false);
super.initState();
}
@override
Widget build(BuildContext context) {
return myUi();
}
@override
void deactivate() {
states.changeSettings(settings); //just a dummy function, doesn't do anything
states.finishSetting();
super.deactivate();
}
}
我已经删除了不必要的代码。我在上面的代码中尝试做的是更改一些应用程序设置并在我离开该设置页面时应用它们。
finishSetting()
方法:
finishSetting() {
notifyListeners();
}
错误:
The following assertion was thrown while dispatching notifications for StatesProvider:
setState() or markNeedsBuild() called during build.
我知道Widgets 的notifyListeners()
调用方法正在监听它。build()
但是当我离开设置页面时,我没有看到任何小部件的build()
方法被调用。我应该怎么办?
notifyListeners()
一般来说,我离开页面时有没有办法打电话?