StatefulWidget의 lifecycle은 다음 단계를 따른다.
- createState()
- initState()
- didChangeDependecies()
- build()
- didUpdateWidget()
- setState()
- deactivate()
- dispose()

1. createState()
: statefulWidget이 빌드되었을 때, createState()를 즉시 호출한다. 이 메소드는 반드시 존재해야 한다.
class HomeScreen extends StatefulWidget {
HomeScreen({Key key}): super(Key: key);
@override
HomeScreenState<StatefulWdiget> createState() => HomeScreen();
}
2. initState()
: 각 state에 대해서 한번만 호출된다. initState()에서 일부 코드를 추가하면 widget이 빌드되기 전에 initStaet()가 먼저 실행된다.
이 메소드는 상위 widget(statefulWdiget)의 initState()를 호출하는 super.initState()를 호출해야한다. 여기에서 변수, 객체, stream, AnimationController 등을 초기화 할 수 있다.
@override
void initState(){
super.initState();
}
3. didChangeDependencies()
: didChangeDependencies()는 initState() 다음에 호출된다. 그리고 widget이 의존하는 데이터의 객체가 호출될때 호출된다. 상속한 widget이 업데이트될 때 네트워크 호출 등이 필요한 경우 유용하다.
@overrid
void didChageDependencies(){
}
4. build()
: 모든 UI Widget을 렌더링할 때 마다 호출. 반드시 Widget을 리턴해야 한다.
@override
Widget build(BuildContext context) {
return Scaffold()
}
5. didUpdateWidget()
: didUpdateWidget()은 상위 위젯이 변경되어 이 widget을 업데이트해야 하는 경우 hot reload를 하기 위해 호출한다. 상위 widget이 디자인 또는 속성을 변경하고 하위 widget을 수정해야하는 시점에서 호출된다.
@protected
void didUpdateWidget(Home oldWidget) {
super.didUpdateWidget(oldWidget);
}
6. setState()
: setState()를 호출하면 데이터가 변경됨을 의미한다. setState()가 호출되면 BuildContext의 widget을 다시 빌드하게 된다.
dispose()를 호출한 이후에 setState()를 호출하게 된다면 오류가 발생한다.
void function(){
setState(()=>{});
}
7. deactivate()
: deactivate()는 state가 트리에서 제거될 때 고려된다.
@override
void deactivate(){
super.deactivate();
}
8. dispose()
: dispose()는 initState()와 반대되며, 객체와 state가 widget 트리에서 제거되어야 할 때 사용된다.
여기에서 stream 구독 취소, AnimationController 폐기, Timer 취소 등의 작업을 한다.
@override
void dispose(){
super.dispose();
}
*참고: https://medium.flutterdevs.com/app-lifecycle-in-flutter-c248d894b830
'Programming > Flutter' 카테고리의 다른 글
Flutter와 Supabase (0) | 2024.08.05 |
---|---|
Flutter 인기 라이브러리 - Hive 데이터베이스 (0) | 2024.05.08 |
[Flutter] Provider로 상태관리 (0) | 2024.04.02 |
Flutter 시작하기 (0) | 2023.06.03 |
Flutter StatelessWidget과 StatefulWidget의 차이 (0) | 2022.12.25 |