본문 바로가기

[Flutter] StatefulWidget vs StatelessWidget

I'm 영서 2023. 1. 17.
반응형

StatelessWidget

특징

위젯 내부에서 값 변경돼도 위젯 자체적으로 렌더링 불가

 

생명주기

StatelessWidget 상태전이

 

1. StatelessWidget이 빌드되면 생성자가 실행.
2. build() 함수 실행 
3. build()함수에 반환한 위젯이 렌더링

 

 

 

 

 

 

StatefulWidget

특징

위젯 내부 값이 변경되었을때 위젯에서 다시 렌더링

생명주기

위젯 클래스와 State 클래스 2개로 구성
A. 상태변경이 없는 생명주기

상태변경이 없는 생명주기 그림

상태변경이 없는 생명주기는 위젯이 화면에 나타나며 생성되고 화면에서 사리지며 삭제되는 과정을 의미.

  1. StatefulWidget 생성자가 실행
  2. createState() 함수 실행. createState()는 StatefulWidget을 상속받았을 때 반드시 오버라이드 해야하는 함수로 StatefulWidget과 연동되는 State 생성한다.
  3. State생성 후 initState()실행. State가 생성되는 순간에만 단 한번 실행된다.
  4. didChangeDependencies() 실행. buildContext가 제공되고 State가 의존하는 값이 변경되면 재실행된다.
  5. State의 상태가 dirty로 설정. dirty상태는 build()가 재실행되야 하는 상태 
  6. build()함수 실행되고 UI반영
  7. 상태가 clean 상태로 변경되고 화면에 변화가 없으면 이상태 유지
  8. 위젯이 위젯 트리에서 사라지면 deactivate()실행. State가 일시적으로 또는 영구적으로 삭제될 때 실행
  9. dispose()가 실행된다. 위젯이 영구적으로 삭제될 때 실


B. StatefilWidget생성자의 매개변수가 변경됐을 때의 생명주기

StatefulWidget생성자의 매개변수가 변경됐을 때 생명주기

StatefulWidget도 StatelessWidget처럼 하나의 클래스. 매개변수를 입력받을 수 있음. 위젯이 생성된 후 삭제가 되기 전 매개변수가 변경되면 위의 생명주기가 실행된다.

  1. StatefulWidget 생성자가 실행
  2. didUpdateWidget()이 실행
  3. 상태가 dirty로 변경
  4. build()실행
  5. State상태 clean으로 변경


C. State 자체적으로 build()를 재실행할 때의 생명주기

StatelessWidget은 생성될 때 build()함수가 한번 실행되고 절대로 다시 실행되지 않는다. 반면 StatefulWidget은 StatefulWidget클래스와 State클래스로 구성돼 있는데, State클래스는 setState()함수를 실행해서 build() 함수를 자체적으로 재실행 할 수 있다.

State자체적으로 build()를 재실행 할때

  1. setState()를 실행
  2. State가 dirty상태로 변경
  3. build()실행
  4. State가 clean상태로 변경

 

 

반응형

댓글