플러터 앱 개발

Chapter 17. StatefulWidget Lifecycle

yuna 2026. 2. 5. 21:22

StatefulWidget Lifecycle이란?

: Flutter에서 상태(State)를 가지는 위젯이 생성되고, 화면에 그려지고, 업데이트되고, 제거되기까지의 전체 흐름

 

createState()
  ↓
initState()
  ↓
didChangeDependencies()
  ↓
build()
  ↓
(setState / 부모 변경)
  ↓
didUpdateWidget()
  ↓
build()
  ↓
deactivate()
  ↓
dispose()

 

 

Lifecycle 메서드 정리

1. createState( )

  • StatefulWidget이 처음 생성될 때 호출
  • 해당 위젯과 연결될 State 객체를 생성
  • 보통 직접 로직을 작성하지 않음

2. initState( )

  • State 객체가 생성된 후 단 한 번만 호출
  • 위젯이 화면에 나타나기 전 초기화 단계

주요 사용처

  • API 호출
  • 초기 상태 값 설정
  • Controller 생성 (TextEditingController, AnimationController 등)
  • Listener 등록

3. didChangeDependencies( )

 

  • InheritedWidget에 의존하는 데이터가 변경될 때 호출
  • initState() 직후 최초 1회 자동 호출
  • 이후에도 의존하던 값이 변경되면 다시 호출됨

4. InheritedWidget이란?

  • 위젯 트리의 상위에서 하위로 데이터 전달할 때 사용하는 클래스
  • BuildContext 를 사용해서 데이터 접근
  • Flutter 상태관리 라이브러리들의 기반

 

5. BuildContext이란?

 

  • 위젯이 위젯 트리 안에서 차지하는 위치 정보
  • 상위 위젯(Scaffold, Theme, Navigator 등)에 접근하기 위한 참조값

 

  • build : UI를 그리는 메서드. 최초, setState 호출 시, didUpdateWidget 호출 시
  • deactivate : 위젯이 위젯 트리에서 제거되기 직전
  • dispose : 위젯이 트리에서 제거되기 직전. 리소스 해제(TextEditingController dispose 등) 해야함

6. didUpdateWidget이란?

  • 부모로부터 받은 설정이 바뀌었는지 감지해서, State 내부 로직을 갱신하라고 Flutter가 주는 기회
     

주 용도

  • 부모로부터 받은 값 변경 감지
  • State 내부 값 동기화
  • Controller 재설정
부모로부터 받은 설정이 바뀌었는지 감지해서
State 내부 로직을 갱신할 수 있는 기회

 

7. deactivate( )

 

  • 위젯이 위젯 트리에서 제거되기 직전 호출
  • 다시 삽입될 수도 있는 상태
  • 실무에서는 거의 사용하지 않음

8. dispose( )

 

  • 위젯이 트리에서 완전히 제거될 때 호출
  • 리소스 해제 필수

 

StatefulWidget Lifecycle은 위젯이 생성되고, 상태 변화에 따라 다시 그려지며, 제거될 때까지 Flutter가 관리하는 상태 흐름
initState는 초기화, build는 UI 렌더링, didUpdateWidget은 부모 변경 대응, dispose는 리소스 정리를 담당