flutter - Flutter如何处理手机屏幕被关闭的问题?
问题描述
当屏幕关闭时,只有一些 Dart 代码运行。Flutter 在手机屏幕关闭时会做什么?它会停止渲染但仍运行特定的 Dart 代码吗?
在我的例子中,即使屏幕关闭,也会调用 Dart 回调函数(传递给 Flutter 插件)。我想自定义/控制这种行为,因为我正在运行计算成本高的代码,当用户看不到输出时不应该运行这些代码。我已经可以在屏幕关闭时运行代码(例如通过使用 screen_state 颤振插件或使用ScreenStateObserver
Miguel Ruivo 提供的,但它有局限性。我无法使用 弹出路由Navigator.pop()
。我也想大致了解 Flutter屏幕关闭时会受到影响。
解决方案
您想看看WidgetsBindingObserver mixin,因为它会为您提供与小部件状态不同的应用程序生命周期。
然后你会想要订阅initState()
@override
void initState() {
super.initState();
WidgetsBinding.instance.addObserver(this);
}
并删除监听器dispose()
@override
void dispose() {
WidgetsBinding.instance.removeObserver(this);
super.dispose();
}
并访问不同的状态didChangeAppLifecycleState()
@override
void didChangeAppLifecycleState(AppLifecycleState state) {
switch (state) {
case AppLifecycleState.resumed:
print('app resumed');
break;
case AppLifecycleState.inactive:
print('app inactive');
break;
case AppLifecycleState.paused:
print('app paused');
break;
case AppLifecycleState.detached:
print('app deatched');
break;
}
}
推荐阅读
- sql - 查询选定时间段内不存在事件的模型
- reactjs - 在反应中添加和编辑来自同一表单的数据
- javascript - 如何在javascript中实现django的url模板加载?
- arm - arm alp armstrong 数题的代码怎么写?
- php - PHP8:垂直线与类型?
- reactjs - 我正在尝试使用 react bootstrap 创建手风琴
- sql - 如何在 SQL 中获取 GROUP BY 中的最新记录
- python - Setuptools:分发由单个模块组成的包
- flutter - 使用 Here Map sdk 为卡车路线提供转弯导航
- flutter - "extendBodyBehindAppBar: true," 创建边距