Stateful widget
Updated:
1.State?
-
State 란 UI 가 변경되도록 영향을 미치는 데이터입니다.
-
App 수준과 Widget 수준의 데이터가 있습니다 (클릭을해서 check box 가 true / false , textbox 에서 ID, Password 등 입력 하는 데이터등 app 의 상태를 바꾸는 모든 상태를 가리 킵니다)
2.Stateless widget
- 흔희 생태가 없는 위젯을 가리키나, 실제적으론 State 가 정해져 있고, 그것이 변하지 않은 위젯을 말합니다 (한번 지정된 text, color 등은 widget 이 삭제되지 않는한 변하지 않는다는 것입니다)
3.Widget, Element, Render tree
Widget tree
는 사용자가 설정하는 tree 로 UI 를 구성하는데 사용되는 tree 이며, element, render tree
는 구성된 widget tree 를 바탕으로 flutter 내부에서 실행되는 tree 구조 입니다
-
widget tree
는 사용자가 작성한 code 에 근거해서 flutter 가 build method 를 호출해서 생성하는 것입니다. (예, MyApp -> Scaffold -> AppBar -> Text) => 이것은 하나의 구성일뿐 직접적으로 스크린에 그려 지는것은 아닙니다. 즉, widget tree 역활은 하나의 설계도 역활로써 flutter 에게 순서와 방식을 알려주는 단계입니다 -
Element tree
는 중간에서 widget tree 와 render tree 를 연결하는 역활을 합니다. flutter 가 widget tree 를 바탕으로 자동으로 생성해주는 tree 이고, 모든 widget tree 에 하나하나씩 맞대응해서 생성됩니다. -
render tree
는 screen 에 직접적으로 그려주는 high level system 입니다. Element tree 는 실질적으로 render 되기 위해서 render object 끼리 일대일 맞대응해서 연결 되어 있습니다. 최종적으로 눈으로 보여지는 스크린상에 모든 요소는 render tree 의 작업 결과 입니다.
Stateless widget 값 변경시 일어나는 순서
Container widget 의 색을 white 에서 blue 로 변경 => Hot reload => build method => widget tree rebuild => Element tree link update => Element tree info => Render tree => Render object re-rendering
-
flutter 의 hot-reload 는 실행 될때 마다 화면에 다시 그리는것이 아니라 (rebuild 되는 것이 아니라) element tree 를 통해서 변경된 부분만을 다시 그리는 방법을 사용하기 때문에 빠르고 효율적인 rendering 이 가능한것입니다
-
stateless widget 에서 값이 변경되면 오직 rebuild 만을 통해서 새로운 State 를 적용해서 화면이 변경됩니다
4.Stateful widget
-
Stateful
andStateless widget
의 공통점은 생성자를 통해서 외부에서 데이터가 입력이 되면 그 결과를 반영하기 위해서build method
가 호출이 되면서, widget 들이rebuild
되며 필요한 부분의 UI를 다시 rendering 하게 됩니다 -
하지만
Stateless
와의 결정적인 차이점은Stateful widget
은 내부에State
라는 또다른 class 를 가지고 있다는 점입니다. 2개의 class 가 결합해서 Stateful widget 을 만들고 있는것입니다. -
Stateful widget 이 rebuild 되는 2가지의 경우
-
child 위젯의 생성자를 통해 새로운 데이터가 전달 될때
-
internal state 가 바뀔때
-
🔶 🔷 📌 🔑
Reference
-
Adding interactivity to your Flutter app - https://flutter.dev/docs/development/ui/interactive
-
코딩 셰프 - https://www.youtube.com/watch?v=StvbitxUKSo&list=PLQt_pzi-LLfoOpp3b-pnnLXgYpiFEftLB
Leave a comment