当你在Flutter中需要监听应用程序的生命周期变化时,可以使用AppLifecycleListener
。在Flutter 3.13中,AppLifecycleListener
被添加到Framework中,用于监听应用程序的生命周期变化,并响应退出应用程序的请求等支持。
在Flutter 3.13之前,我们通常使用WidgetsBindingObserver
的didChangeAppLifecycleState
方法来实现生命周期的监听。但是,didChangeAppLifecycleState
方法比较“粗暴”,直接返回AppLifecycleState
让用户自己处理。而AppLifecycleListener
则是在WidgetsBindingObserver.didChangeAppLifecycleState
的基础上进行了封装,再配合当前lifecycleState
形成更完整的生命周期链条,对于开发者来说就是使用更方便,并且API相应更直观。
以下是一个简单的使用AppLifecycleListener
的示例:
late final AppLifecycleListener _listener;
late AppLifecycleState? _state;
void initState() {
super.initState();
_state = SchedulerBinding.instance.lifecycleState;
_listener = AppLifecycleListener(
onShow: () => _handleTransition('show'),
onResume: () => _handleTransition('resume'),
onHide: () => _handleTransition('hide'),
onInactive: () => _handleTransition('inactive'),
onPause: () => _handleTransition('pause'),
onDetach: () => _handleTransition('detach'),
onRestart: () => _handleTransition('restart'),
// 每次状态改变都会触发。上面的回调只用于特定的状态转换。
onStateChange: _handleStateChange,
);
}
void _handleTransition(String name) {
print("########################## main $name");
}
late AppLifecycleState? _state
是一个实例变量,用于存储当前应用程序的生命周期状态。在上述示例中,_state
在initState()
方法中被初始化为当前应用程序的生命周期状态,即SchedulerBinding.instance.lifecycleState
。虽然在这个示例中没有使用_state
,但是在其他的应用场景中,你可能需要使用它来记录应用程序的生命周期状态并在后续的处理中使用。AppLifecycleListener
是一个完整的类,所以使用它无需使用mixin
,你只需要在使用的地方创建一个AppLifecycleListener
对象即可。AppLifecycleListener
根据AppLifecycleState
区分好了所有回调调用,调用编排更加直观。最后,AppLifecycleListener
可以更方便地判断和记录整个生命周期的链条变化,因为它已经帮你封装好回调方法。