flutter - 如何在不使用状态的情况下实现 Flutter 的 WidgetsBindingObserver 的一个版本?
问题描述
我正在构建一个颤振应用程序,当应用程序进入后台时,我需要在提供程序中调用一个方法。
我可以通过使用 WidgetsBindingObserver 创建一个有状态的小部件来轻松地做到这一点(就像这里的例子)。
有没有办法在不需要有状态小部件的情况下做到这一点?Provider 是一个伟大的架构,而 state 是一种反模式。
解决方案
可能,您可以尝试创建一个不是小部件的类并扩展 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 小部件,您只需将状态保留在其他地方,即您配置提供程序的地方。
推荐阅读
- python - 主字符串 python/biopython 中的现有子字符串没有输出
- convertapi - convertApi.ConvertAsync 不返回转换后的图像
- c# - 视图未在具有 MySQL 数据库的 ASP.NET MVC 应用程序中显示数据
- html - 添加与多行 h1 的最长文本行一样宽的边框
- sql - SQL - 字段中相同ID的不同值,显示在一行中
- angular - 对于所有 API 调用,Angular 获取相同的会话 ID
- python - 从字典列表中创建 Pandas DataFrame?每个字典作为 DataFrame 中的行?
- google-apps-script - 如何在 Google Sheets Scripts 中获取工作表的最后一行(不是数据的最后一行)?
- lazarus - 我需要帮助解决 Lazarus FPC Blowfish 库使用问题
- python - 为什么没有出现“游戏结束”文字?