监听应用生命周期状态
home_page.dart
应用程序首页
添加应用生命周期状态监听 WidgetsBindingObserver,在回调方法 didChangeAppLifecycleState 中根据生命周期状态处理不同的业务逻辑
class _HomePageState extends HiState<HomePage> with WidgetsBindingObserver {
@override
void initState() {
super.initState();
// 注册应用生命周期监听
WidgetsBinding.instance.addObserver(this);
}
@override
void dispose() {
// 移除生命周期监听
WidgetsBinding.instance.removeObserver(this);
HiNavigator.getInstance().addListener(listener);
super.dispose();
}
/// 监听应用生命周期变化
@override
void didChangeAppLifecycleState(AppLifecycleState state) {
super.didChangeAppLifecycleState(state);
print(':didChangeAppLifecycleState:$state');
switch (state) {
// 处于这种状态的应用程序应该假设他们可能在任何时候暂停
case AppLifecycleState.inactive:
break;
case AppLifecycleState.resumed: // 从后台切前台,界面可见
break;
case AppLifecycleState.paused: // 界面不可见,后台
case AppLifecycleState.detached: // APP 结束时调用
break;
}
}
}
常用生命周期的状态
// 处于这种状态的应用程序应该假设他们可能在任何时候暂停
AppLifecycleState.inactive
// 从后台切前台,界面可见
AppLifecycleState.resumed
// 界面不可见,后台
AppLifecycleState.paused
// APP 结束时调用
AppLifecycleState.detached
应用生命周期解决实际开发问题
详情页返回首页,状态栏字体变化
@override
void initState() {
super.initState();
// 注册应用生命周期监听
WidgetsBinding.instance.addObserver(this);
// 监听压栈出栈
HiNavigator.getInstance().addListener(this.listener = (current, pre) {
// 当页面返回到首页恢复首页的状态栏样式
if (pre?.page is VideoDetailPage && !(current.page is ProfilePage)) {
var statusStyle = StatusStyle.DARK_CONTENT;
changeStatusBar(color: Colors.white, statusStyle: statusStyle);
}
});
}
/// 监听应用生命周期变化
@override
void didChangeAppLifecycleState(AppLifecycleState state) {
super.didChangeAppLifecycleState(state);
print(':didChangeAppLifecycleState:$state');
switch (state) {
// 处于这种状态的应用程序应该假设他们可能在任何时候暂停
case AppLifecycleState.inactive:
break;
case AppLifecycleState.resumed: // 从后台切前台,界面可见
// fix android 压后台,状态栏字体变白的问题
if (!(_currentPage is VideoDetailPage)) {
changeStatusBar(
color: Colors.white, statusStyle: StatusStyle.DARK_CONTENT);
}
break;
case AppLifecycleState.paused: // 界面不可见,后台
case AppLifecycleState.detached: // APP 结束时调用
break;
}
}