Lifecycle(생명주기)를 알기 위해서는 상태를 다루는 두개의 State 객체를 알아야한다.
Stateless Widgets
constructor Function
↓
build()
변경할 수 없는 상태를 가지는 위젯이다. 즉, 보여주기만 하는 build()메소드로만 넘어간다.
Stateful Widget
Constructor Function
↓
initState()
↓
build()
↓
setState()
↓
didUpdateWidget()
↓
Build()
변경가능한 상태를 가지는 위젯이다. 여러 라이프사이클 메소드를 가진다.
라이플사이클 메소드를 통해 원하는 메소드의 호출 순서, 조건을 성정할 수 있다.
Stateful()위젯이 생성될때, 자동적으로 맨처음 호출되는 메소드이다. (오직 한번만 호출됨)
void initState() {
super.initState();
// todo
}
※반드시 super.initState()를 호출해야한다.※
위젯 최초 생성 시 initState()바로 다음에 호출되는 메소드이다.
또한, 위젯이 의존하는 데이터의 객체가 호출될때마다 호출된다. 따라서, 상속한 위젯이 업데이트되어 네트워크 호출이 필요한 경우 유용하다.
void didChangeDependencies() {
super.didChangeDependencies();
// todo
}
※반드시 super.didChangeDependencies()를 호출해야한다.※
개발하는 입장에서 매우 자주 호출되는 메소드이다. 메소드 수행 후 자동으로 build context의 위젯을 rebuild한다. 따라서 유저와의 상호작용을 통해 앱의 상태가 변하도록 한다.
위젯트리에서 상태객체가 지워질때 호출된다.
void deactivate() {
super.deactivate();
// todo
}
※반드시 super.deactivate()를 호출해야한다.※
State객체를 영구적으로 제거한다. (해당 화면은 더이상 build되지않음)