개요
Flutter 위젯은 상태(State)와 요소(Element)로 구성된다. 상태를 가지는 위젯은 StatefulWidget을 상속하고, 상태를 가지지 않는 위젯은 StatelessWIdget을 상송한다.
StatefulWidget의 경우, 상태 관리와 생명주기 메서드를 통해 위젯의 상태 변화에 대응할 수 있다. 주요 생명주기는 다음과 같다.
createState()
•
위젯의 상태를 생성한다.
•
위젯이 처음 생성 될 때 한 번 호출된다.
initState()
•
상태 객체가 생성되고 난 후 호출된다.
•
위젯이 위젯 트리에 추가되기 전에 호출되며, 한 번만 실행된다.
•
이 단계에서는 context를 사용할 수 있지만, context를 통해 InheriredWidget에 접근하면 안된다.
didChangeDependencies()
•
initState() 다음에 호출된다.
•
위젯의 의존하는 InheriedWidget이 변경되었을 때 호출된다.
•
처음 생성 시에도 호출되며, 이때 context를 통해 InheritedWidget에 안전하게 접근할 수 있다.
build(BuildContext context)
•
위젯의 UI를 그리는 메서드이다.
•
위젯이 처음 빌드되거나, 상태가 변경되어 재빌드될 때마다 호출된다.
didUpdatedWidget(covariant OldWidget oldWidget)
•
부모 위젯이 위젯을 재빌드하여 위젯의 설정이 변경되었을 때 호출된다.
•
예를 들어, 부모로부터 전달받은 widget의 props가 변경되었을 때이다.
setState(VoidCallback fn)
•
상태를 변경하고, 위젯을 재빌드하기 위해 호출한다.
•
fn 콜백 안에서 상태를 변경하고, Flutter 는 변경된 상태를 반영하여 build() 메서드를 호출한다.
deactivate()
•
위젯이 위젯 트리에서 제거될 때 호출된다.
•
재배치(Reparenting) 과정에서도 호출될 수 있다.
dispose()
•
위젯이 완전히 소멸되어 더 이상 사용되지 않을 때 호출된다.
•
리소스 해제, 컨트롤러 종료 등을 수행한다.