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;
    }
  }

你可能感兴趣的:(Flutter,flutter,生命周期)