본문 바로가기
new

Flutter 앱 라이프 사이클 관리: WidgetsBinding, WidgetsBindingObserver, didChangeAppLifecycleState()

by ftbd 2024. 3. 7.

Flutter 앱 개발에서 앱의 상태 변화에 맞춰 적절하게 동작하는 것은 중요합니다. WidgetsBinding, WidgetsBindingObserver, didChangeAppLifecycleState()는 앱의 라이프 사이클을 관리하는 데 중요한 역할을 하는 클래스와 메서드입니다.

 

1. WidgetsBinding

WidgetsBinding은 Flutter 앱의 핵심적인 클래스 중 하나입니다. 앱의 윈도우, 렌더링, 앱 라이프 사이클 관리 등을 담당합니다. WidgetsBinding은 다음과 같은 기능을 제공합니다.

  • 앱 윈도우 관리: 앱 윈도우를 생성하고 관리합니다.
  • 렌더링 파이프라인 관리: 앱 UI를 렌더링하는 파이프라인을 관리합니다.
  • 앱 라이프 사이클 관리: 앱의 시작, 종료, 백그라운드/포그라운드 전환 등을 관리합니다.
  • 이벤트 처리: 사용자 입력 이벤트를 처리합니다.

 

2. WidgetsBindingObserver

WidgetsBindingObserver는 앱 라이프 사이클 변화를 관찰하는 데 사용되는 추상 클래스입니다. 앱 개발자는 WidgetsBindingObserver를 상속받아 앱의 상태 변화에 따라 처리할 코드를 구현할 수 있습니다. WidgetsBindingObserver는 다음과 같은 메서드를 제공합니다.

  • didChangeAppLifecycleState(AppLifecycleState state): 앱의 라이프 사이클 상태가 변할 때마다 호출됩니다.
  • didChangeLocale(Locale locale): 앱의 로케일이 변경될 때 호출됩니다.
  • didChangeMetrics(Metrics metrics): 앱의 화면 크기, 방향 등 메트릭 정보가 변경될 때 호출됩니다.

 

3. didChangeAppLifecycleState()

didChangeAppLifecycleState()는 앱의 라이프 사이클 상태가 변할 때마다 호출되는 메서드입니다. 이 메서드를 사용하여 앱의 상태 변화에 따라 적절한 동작을 구현할 수 있습니다. didChangeAppLifecycleState()는 다음과 같은 인수를 받습니다.

  • state: 앱의 현재 라이프 사이클 상태 (AppLifecycleState enum 값)

didChangeAppLifecycleState() 예시

다음은 didChangeAppLifecycleState() 메서드를 사용하여 앱의 상태 변화에 따라 UI를 변경하는 예시입니다.

 

class MyObserver extends WidgetsBindingObserver {
  @override
  void didChangeAppLifecycleState(AppLifecycleState state) {
    switch (state) {
      case AppLifecycleState.resumed:
        // 앱이 포그라운드로 돌아왔을 때 UI를 활성화합니다.
        break;
      case AppLifecycleState.inactive:
        // 앱이 백그라운드로 이동할 때 UI를 비활성화합니다.
        break;
      case AppLifecycleState.paused:
        // 앱이 일시 중지될 때 UI를 숨깁니다.
        break;
      default:
        break;
    }
  }
}