플러터 트리
Widget tree
Element tree
Element tree
→ Render treeRender tree
1) Widget tree가 Rebuild 됨 (Relod x)
2) Element tree 는
a. 연결되었던 위젯 트리 요소와 위치나 타입 속성 등이 동일
한 위젯 트리 요소로 링크(point) 업데이트 (Rebuild X)
b. 추가, 변경된 코드로 인해 다시 렌더링이 필요한 경우, 해당 정보를 연결된 렌더 객체에 전달
3) Render tree는
엘레멘트 요소가 전달한 정보에 의해 바뀐부분 만을 새로 그림
위젯 코드 수정 →
Hot Reload
→build method
→Wiget tree rebuild
→Elemnt tree link update
→Elemnt tree info
→Render tree
→Render object re-redering
변경된 상태를 반영하는 위젯을 만들 때 사용
state가 변경되는 경우
- Child 위젯의 생성자를 통해서 데이터가 전달될 때
- inernal state가 변할 때
1. class MyApp extends StatefulWidget {}
StatefulWidget은 Widget 클래스를 상속 함
→ Widget 클래스는 생성되면 state가 변경되지 않음
난감..상태에 따라 변경된다는 클래스가 상태가 변경되지 않는 속성을 지님..;;;;
so, 상태를 나타내는 클래스를 만들어서 연결함
2. class MyAppState exteneds State <My App>
generic type
이고 StatefulWiget을 상속
상태 클래스에 어떤 클래스(MyApp)의 상태인지는 지정(연결) 했지만 상태가 변경된 건 그 클래스(MyApp)에 어찌 알려주나?
so, 클래스 생성시 상태를 확인하는 메소드를 만듦
3. MyApp 클래스의 createState 메소드
class MyApp extends StatefulWidget {
@override
State<StatefulWidget> createState (){
return MyAppState();
}
}
4. MyAppState 클래스의 setState 메소드
setState ( )가 하는 일
1) 매개변수로 전달된 함수 호출 (상태 변경)
2) 빌드 메소드 호출
Stateful Wiget 실행 프로세스
MyApp Stateful wiget 생성
→ MyApp Stateful element 생성
(메모리 상에 독립된 개체, MyAppState object에 대한 정보도 가지고 있음
→ _createState method 호출
→ MyAppState object 생성 (MyApp Stateful wiget 과 간접적으로 연결)
→ setState method 호출 (상태변경 발생)
→ State object rebuild
→ MyApp Stateful wiget rebuild
→ MyAppState object 새로운 상태 저장 → 새로 생성된 MyApp Stateful wiget 로 연결
stateless 위젯 :
build 메소드 → UI 렌더링
stateful 위젯
State
→ build 메소드 → UI 렌더링