1. createState()
처음 스테이트풀을 시작할 때 호출
- StatefulWidget 클래스를 상속받는 클래스는 반드시 createState() 함수를 호출해야 함.
이 함수는 다른 생명주기 함수들이 포함된 State 클래스를 반환해야 함.
즉, 위젯의 상태를 생성하는 함수로 생각할 수 있음.
2. mounted == true
createState() 함수가 호출되면 mounted는 true
- createState() 함수가 호출되어 상태가 생성되면 곧바로 mounted 속성이 true로 변경.
mounted 속성이 true라는 것은 위젯을 제어할 수 있는 buildContext 클래스에 접근할 수 있다는 의미.
buildContext가 활성화되어야 setState() 함수를 이용할 수 있음. 아니면 오류 발생.
3. initState()
State에서 제일 먼저 실행되는 함수. State 생성 후 한번만 호출
- initState() 함수는 위젯을 초기화할 때 한번만 호출.
주로 데이터 목록을 만들거나 처음 필요한 데이터를 주고받을 때 호출.
initState() 함수를 호출할 때 내부에서 _getJsonData() 함수를 호출해 서버에서 받아온 데이터를 화면에 출력하게 만들 수 있음.
만약 네트워크 통신이 안되거나 데이터가 이상하다면 화면에 표시하기 전에 미리 알아서 적절하게 대응해야 하므로 위젯을 초기화하는 initState() 함수에서 데이터를 준비하는 것이 좋음
4. didChangeDependencies()
initState() 호출 후에 호출되는 함수
- 위젯을 초기화하는 initState() 함수가 호출된 후에 이어서 바로 호출되는 함수가 didChangeDependencies() 함수임.
이 함수는 데이터에 의존하는 위젯이라면 화면에 표시하기 전에 꼭 호출해야 함.
주로 상속받은 위젯을 사용할 때 피상속자가 변경되면 호출.
5. build()
위젯을 랜더링하는 함수. 위젯을 반환
- Widget을 반환 = 위젯을 화면에 렌더링.
build() 함수에서 위젯을 만들고 반환하면 비로소 화면에 표시
6. didUpdateWidget()
위젯을 변경해야 할 때 호출하는 함수
- 부모 위젯이나 데이터가 변경되어 위젯을 갱신해야 할 때 호출.
특정 이벤트에 의해 위젯이 변경되면 didUpdateWidget() 함수를 호출해 위젯을 갱신할 수 있음.
initState() 함수는 위젯을 초기화할 때 한번만 호출되므로 위젯이 변경되었을 때 호출하는 didUpdateWidget() 같은 함수 필요.
7. setState()
데이터가 변경되었음을 알리는 함수. 변경된 데이터를 UI에 적용하기 위해 피룡
- setState() 함수를 이용하면 데이터가 변경되었다는 것을 알려주고 변경된 데이터를 이용해 화면의 UI를 변경할 수 있도록 해줌.
플러터 앱을 만든다는 것 = 앱의 화면 구성이므로 setState() 함수를 제일 많이 호출하게 됨.
8. deativate()
State가 제거될 때 호출
- deactive() 함수는 State 객체가 플러터의 구성 트리로부터 제거될 때 호출됨.
다만, State 객체가 제거됐다고 해서 해당 메모리까지 지워지지는 않음.
dispose() 함수를 호출하기 전까지는 State 객체를 재사용 가능.
9. dispose()
State가 완전히 제거되었을 때 호출
- State 객체를 영구적으로 소멸할 때 호출 = 해당 위젯을 종료한다는 의미와 같음.
네트워크 통신을 하거나 스트림 통신을 하다가 dispose() 함수를 호출하면 데이터 전송 중지.
10. mounted == false
모든 프로세서가 종료된 후 mounted가 false로 됨
- State 객체가 소멸하면 마지막으로 mounted가 false가 되면서 생명주기가 끝남.
mounted 속성이 false가 되었다는 것은 이제 이 State는 재사용할 수 없다는 의미.
'Flutter' 카테고리의 다른 글
[트러블슈팅] The emulator process for AVD Pixel_3_API_30 has terminated. 오류 | 플러터 에뮬레이터 실행 안됨 | AppData 경로 찾는법 (0) | 2024.12.03 |
---|---|
[Flutter] 플러터 특징 | 플러터 장점 (0) | 2024.11.23 |