Flutter 监听应用生命周期状态

监听应用生命周期状态

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;
    }
  }
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值