State
UI가 변경되도록 영향을 미치는 데이터
Data
App 수준 데이터
우리가 평소에 생각하는 데이터
ex) 사용자 인증이나 서버에 저장된 정보를 가져올 때 사용하는 데이터
Widget 수준 데이터
앱의 상태를 바꾸는 모든 행위
ex) Radio 버튼을 선택하거나, 텍스트 필드에 텍스트가 입력되는 것과 관련된 행위들
Stateless widget
State가 변하지 않는 위젯
위젯 자체가 rebuild되지 않는 한 변하지 않는다. → rebuild 만을 통해서 새로운 State를 적용할 수 있다.
Stateful widget
State가 변하는 위젯.
Stateful Widget은 내부에 State라는 또 다른 클래스가 구성되어 있다.
Stateful 위젯은 State 클래스가 Build method를 가지고 있다.
때문에, rebuild, Rendering은 State 클래스가 담당한다.
Stateful 위젯이 Rebuild 되는 경우는 다음과 같다 :
- Child 위젯의 생성자를 통해서 새로운 데이터가 전달될 때
- Internal state가 바뀔 때
Stateful인 MyApp 위젯이 있다고하자.
setState() 등이 호출되면,
새로운 MyApp Stateful 위젯이 생기면서 리빌드 된다.
MyAppState object에는 바뀐 State가 저장되고
element에는 새로운 MyApp Stateful 위젯을 연결한다.
여기서 MyAppState object가 리빌드 되지 않는 이유는 비용을 감소시키기 위해서다.
object까지 리빌드하면 비용이 크기 때문에, 상대적으로 저렴한 Stateful widgit만을 리빌드 시킨다.
Widget lifecycle