【问题标题】:Calling notifyListeners() causes errors when called in deactivate() - Flutter在 deactivate() 中调用 notifyListeners() 会导致错误 - Flutter
【发布时间】:2021-02-20 16:51:27
【问题描述】:

我已阅读与此问题相关的所有问题,但没有一个问题与我的相似。

我有两个页面:主页和设置页面。在主页上,我用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() 调用build() Widgets 监听它的方法。但是当我离开设置页面时,我没有看到任何小部件的 build() 方法被调用。我该怎么办?

一般来说,有没有办法在我离开页面时拨打notifyListeners()

【问题讨论】:

    标签: android flutter flutter-provider flutter-change-notifier


    【解决方案1】:

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

    一般来说,我建议您看一下导航,也许在您要路由到页面的位置上的一个简单的"onPopPage" 可能就是您要查找的内容。

    【讨论】:

    • 好吧,dispose() 给出了同样的错误,我不知道如何实现onPopPage
    • 我分析了导航,发现我必须更改更多内容才能使其正常工作。它现在有效,没有你,这是不可能的。我会奖励你,但不会接受答案,因为它真的没有回答我的问题。希望你能理解。
    猜你喜欢
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    • 2014-03-14
    • 2020-05-29
    • 2015-01-18
    • 2021-05-25
    • 2021-08-10
    • 1970-01-01
    相关资源
    最近更新 更多