在deactivate()-Flutter中调用notifyListeners()会导致错误



我已经阅读了与此问题相关的所有问题,但它们都与我的问题不相似。

我有两个页面:主页和设置页面。在主页中,我用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.

我知道notifyListeners()调用了Widgets的build()方法来监听它。但当我离开设置页面时,我没有看到任何小部件的build()方法被调用。我该怎么办?

一般来说,当我离开页面时,有没有方法调用notifyListeners()

这可能是您覆盖了错误的函数:

当小部件被暂时停用时,调用
  • deactivate
  • 尝试使用";dispose,如果小部件被永久地从树中移除则在去激活之后调用"dispose">

总的来说,我建议你看看导航,也许是一个简单的";onPopPage";在你路由到你的页面的地方可能就是你想要的。

相关内容

  • 没有找到相关文章

最新更新