반응형
상태란?
앱에서 사용되는 data들
상태관리란?
앱에서 사용되는 data들(상태)을 관리하는 방법
플러터에 State
App state
- 앱 전반에 걸쳐 사용되는 data
- 앱 여기저기 전반적으로 다 필요하고, 한쪽에서 app state를 변경하면 다른 쪽에서도 data 변경을 반영이 필요
Widget state
- widget 내부에서만 사용되는 data
- App state와의 차이점이라면 위젯 내부에서만 사용되니 공유할 필요가 없는 것
StatelessWidget vs StatefulWidget
StatelessWidget
- 상태를 갖지 않는 위젯으로, 한 번 생성되면 변경되지 않습니다.
- Data가 없는게 아닌, ‘변경될 data가 없다!' 로 이해
- build 메서드를 통해 만들어질때 데이터가 주어질 수도 있으나, 이후내부의 data가 변경되지 않는다.
- 이벤트 시 어떠한 반응을 기대하지 않는 위젯들
StatelessWidget에서 상태를 변경할 수 있는 방법
- StatelessWidget의 상위 위젯에 Stateful위젯이 있어야하고,
- Stateful위젯에서 StatelessWidget을 build할 때, 넣는 인자값이 바뀌고, 그리고 Stateful위젯에서setstate이 실행되면 값이 변했을 경우StatelessWidget은 re-build됩니다.
StatelessWidget DeepDive
- State가 없다
- 내부의 data가 바뀔 수 없다.
- 내부의 data가 immutable하다.
- 위젯자체가 immutable하기 때문에 내부 data들도 immutable 해야함
StatefulWidget
- 변경 가능한 상태를 갖는 위젯
- 내부에서 data가 변경될 경우, 화면을 다시 그려 변경된 위젯에 반영
- 이벤트 시 데이터의 변화를 보여줘야하는 위젯
StatefulWidget DeepDive
- StatefulWidget은 2개의 클래스로 구성
- 바뀌는 부분과 바뀌지 않는 부분으로 나눰
- 위젯의 State가 바뀌고 위젯이 업데이트될때, 위젯 모두를 날려버리면 data도 함께 날라가기 때문
참고자료
State class - widgets library - Dart API
Pragmatic State Management in Flutter (Google I/O'19)
반응형
'프로그래밍 > Flutter' 카테고리의 다른 글
[Flutter] ScrollPhysics types (0) | 2024.09.14 |
---|---|
[Flutter] Open API JSON 파싱 (0) | 2023.10.29 |
[Flutter] HTTP 구조 (0) | 2023.10.29 |
[Flutter] Lambdas (0) | 2023.10.29 |
[Flutter] Future (0) | 2023.10.16 |