0

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

我有两个页面:主页和设置页面。在主页上,我用 . 监听提供者的变化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()一般来说,我离开页面时有没有办法打电话?

4

1 回答 1

1

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

一般来说,我建议您看一下导航,也许在您要路由到页面的地方有一个简单的“onPopPage”可能就是您正在寻找的东西。

于 2020-11-10T20:44:26.760 回答