공log/[Flutter]

[Flutter] 플러터 #03 - 생명주기

ming_OoO 2022. 11. 24. 15:48
728x90

스테이트리스 위젯은 갱신이 불가하므로 생명주기가 없다.

 

스테이트풀 위젯 생명주기

1. createState(): 처음 스테이트풀을 시작할 때 호출

  • 위젯의 상태를 생성하는 함수
  • StatefulWidget 클래스를 상속받는 클래스는 다른 생명주기 함수들이 포함된 State 클래스를 반환하기  위해 반드시 createState() 함수를 호출해야함

2. mounted == true : createState() 함수가 호출되면 mounted는 true

  • createState() 함수가 호출되면 mounted 속성이 true로 변경됨
  • 위젯을 제어할 수 있는 buildContext 클래스에 접근 가능하다는 의미 (buildContext가 활성화 되어야 setState() 함수 이용 가능)
  • setState() 함수 호출하기 전 mounted 속성을 점검 코드로 활용하면 안전성을 높일 수 있다.

3. initState() : State에서 제일 먼저 실행되는 함수, State 생성 후 한 번만 호출

  • 어플이 켜지는 시점, 위젯 초기화할 때 한 번만 호출
  • 데이터 목록을 만들거나 처음 필요한 데이터를 주고받을 때 호출

4. didChangeDependencies() : initState() 호출 후에 호출되는 함수

  • 화면에 보여지기 직전 initState() 함수가 호출 된 후에 이어서 바로 호출
  • 상속받은 위젯을 사용할 때 피상속자가 변경되면 호출

5. build() : 위젯을 렌더링하는 함수, 위젯을 반환

  • 화면에 보여지는 시점
  • 이 함수에서 Widget을 반환하면 화면에 표시. 즉, 위젯을 화면에 렌더링.

6. didUpdateWidget() : 위젯을 변경해야 할 때 호출하는 함수

  • 부모 위젯이나 데이터가 변경되어 위젯을 갱신해야 할 때 호출
  • initState()는 초기화 때 한 번만 호출되기 때문에 위젯이 변경되었을 때 필요

7. setState() : 데이터가 변경되었음을 알리는 함수, 변경된 데이터를 UI에 적용하기 위해 필요

  • build()를 다시 하므로 화면을 다시 그리기 전
  • 데이터가 변경되었다는 것을 알려주고 변경된 데이터를 이용해 화면의 UI를 변경하도록 함

8. deactivate() : State가 제거될 때 호출

  • State 객체가 플러터의 구성 트리로부터 제거될 때 호출
  • State 객체는 제거하지만 해당 메모리까지 제거하진 않기때문에 dispose() 함수를 호출하기 전까지 State 객체 사용 가능

9. dispose() : State가 완전히 제거될 때 호출

  • 어플이 종료되는 시점
  • State 객체를 영구적으로 소멸, 즉 해당 위젯을 종료할 때 호출
  • 위젯을 소멸할 때 꼭 호출해야 하는 함수라면 dispose() 함수 안에서 호출해야 함

10. mounted == false : 모든 프로세서가 종료된 후 mounted가 false로 바뀜

  • State 객체가 소멸하면 마지막으로 mounted 속성이 false가 되면서 생명주기 종료
  • 해당 State는 재사용할 수 없다는 의미, 호출하면 오류 발생
728x90