[Flutter] LifeCycle

메모하는 개발자·2021년 10월 4일
0

Flutter삽질방지

목록 보기
1/9

Stateless Widget

  • StatelessWidget은 복잡한 LifeCycle을 가지고 있지 않는다. rebuild 될때 Constructor, build가 순차적으로 호출된다.
    • Constructor
    • build

Stateful Widget

  • Constructor
  • initState
  • didChangeDependencies
    • initState 호출 직후 한번만 호출 된다.
    • InheritedWidget이나 Provider를 사용하는 경우 →InheritedWidget이나 Provider의 내용이 변경될 때 호출 된다. 즉, 부모 위젯이나, 자기 자신의 상태가 변경될 때는 호출되지 않지만, 해당 위젯이 참조(Depedency)하는 위젯(InheritedWidget이나 Provider)이 변경시 didChangeDependencies 함수가 호출 된다.
  • didUpdateWidget
    • 부모 위젯에 의해 rebuild 가 필요한 경우, build 함수 호출 직전에 호출된다.
      (ex. 부모 위젯의 변경으로 인해,애니메이션을 다시 실행할 필요가 있을 때)
  • build
  • deactivate
    • deactivate 함수는 상태(State) 객체가 트리에서 제거될 때 호출 된다.
      (ex. GlobalKey를 사용하여 현재 위젯을 위젯 트리에 특정 위치로 이동시키면, 해당 위젯의 상태 객체가 변경되므로 deactivate가 실행된다.)
  • dispose
    • 위젯 객체가 위젯 트리에서 영구적으로 제거될 때 호출된다.
      deactivate 가 먼저 호출되어 상태 객체가 제거되었음을 알리고, 이후 dispose가 호출되어 위젯 객체가 삭제되었음을 알립니다.

호출순서

  • Stateful 위젯이 생성될 때: Constructor > initState > didChangeDependencies > build
  • setState가 호출되었을 때: build
  • InheritedWidget 또는 Provider의 값이 변경되었을 때: didChangeDependencies > build
  • 부모 위젯으로부터 전달받는 값이 변경되었을 때: didUpdateWidget > build
  • 상태 객체가 제거되었을 때: deactivate > build
  • 위젯 객체가 제거될 때: deactivate > dispose

0개의 댓글