首页 > 解决方案 > 如何在不使用状态的情况下实现 Flutter 的 WidgetsBindingObserver 的一个版本?

问题描述

我正在构建一个颤振应用程序,当应用程序进入后台时,我需要在提供程序中调用一个方法。

我可以通过使用 WidgetsBindingObserver 创建一个有状态的小部件来轻松地做到这一点(就像这里的例子)。

有没有办法在不需要有状态小部件的情况下做到这一点?Provider 是一个伟大的架构,而 state 是一种反模式。

标签: flutter

解决方案


可能,您可以尝试创建一个不是小部件的类并扩展 WidgetsBindingObserver。

可能是这样的

class MyListener extends  WidgetsBindingObserver {

    MyListener({this.providerInstance}){
        WidgetsBinding.instance.addObserver(this);
    };

    MyProvider providerInstance;
    @override
    void didChangeAppLifecycleState(AppLifecycleState state) {
        providerInstance.doSomethingWithState(state)
    }
}

然后在您的 Provider 设置所在的 main() 或 yourApp() 中实现监听器。

问题是,在你的应用程序的根目录中有一个有状态的小部件确实没有任何问题,如示例中所示。老实说,我认为您的反模式论点没有任何意义。它在颤振中的常见做法是拥有有状态而不是有状态的小部件。

通过没有 statefull 小部件,您只需将状态保留在其他地方,即您配置提供程序的地方。


推荐阅读