Flutter App 生命周期

本文深入解析WidgetsBindingObserver类,展示了如何使用其丰富的回调函数来监听Flutter应用中的各种系统级事件,如屏幕旋转、亮度变化、语言切换等。通过具体代码示例,读者将学会在State生命周期的不同阶段注册和移除监听器,以及如何利用didChangeAppLifecycleState函数跟踪应用的生命周期状态。

WidgetsBindingObserver 这个类提供的回调函数非常丰富,常见的屏幕旋转、屏幕亮度、语言变化、内存警告都可以通过这个实现进行回调。

直接看下源码

abstract class WidgetsBindingObserver {
//页面pop
  Future<bool> didPopRoute() => Future<bool>.value(false);
//页面push
  Future<bool> didPushRoute(String route) => Future<bool>.value(false);
//系统窗口相关改变回调,如旋转
  void didChangeMetrics() { }
//文本缩放系数变化
  void didChangeTextScaleFactor() { }
//系统亮度变化
  void didChangePlatformBrightness() { }
//本地化语言变化
  void didChangeLocales(List<Locale> locale) { }
//App生命周期变化
  void didChangeAppLifecycleState(AppLifecycleState state) { }
//内存警告回调
  void didHaveMemoryPressure() { }
//Accessibility相关特性回调
  void didChangeAccessibilityFeatures() { }
}

只需要在主 State 添加此接口,在 State 对象被插入视图树的时候注册监听器,在State 对象被销毁的时候移除监听器

///State 的生命周期:创建(插入视图树)、更新(在视图树中存在)、销毁(从视图树中移除)。
class _MyAppState extends State<MyApp> with WidgetsBindingObserver {
  @override
  void initState() {
    super.initState();
    WidgetsBinding.instance.addObserver(this); //注册监听器
  }

  @override
  void dispose() {
    super.dispose();
    WidgetsBinding.instance.removeObserver(this); //移除监听器
  }
}

比如复写 didChangeAppLifecycleState 函数,可以监听 App 生命周期的变化。

  //App生命周期变化
  @override
  void didChangeAppLifecycleState(AppLifecycleState state) {
    super.didChangeAppLifecycleState(state);
  }

与 Android 生命周期部分相似:

resumed:可见的,并能响应用户的输入。

inactive:处在不活动状态,无法处理用户响应。

paused:不可见并不能响应用户的输入,但是在后台继续活动中。

 

从后台切入前台:

{msg=didChangeAppLifecycleState : AppLifecycleState.resumed}

Home 从前台退回后台:

{msg=didChangeAppLifecycleState : AppLifecycleState.inactive}
{msg=didChangeAppLifecycleState : AppLifecycleState.paused}

Back 退出

msg=didChangeAppLifecycleState : AppLifecycleState.inactive

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值