1. Stateful Widget
💡Stateless. VS Stateful.
1) stateless widget
- state 없음, state 관리하지 않음
- build 메서드의 호출로 UI를 화면에 한 번 출력함
2) stateful widget
- state 있음
- state 변화를 UI에 반영
- 과한 사용은 성능 저하를 야기함
💡Stateful widget의 구성
1) stateful widget 그 자체
createState()에 의해 State의 객체인 _AppState()를 생성함
2) state
build() 메서드를 통해 화면에 보이는 UI를 구축함
💡setState()
- State에게 데이터가 변경되었음을 알리는 메서드
- setState()에 의해 build()가 재호출되어 변경된 데이터 및 state를 UI에 반영할 수 있음
두 코드 모두 제대로 동작하지만, 가독성의 측면에서 전자를 선호하는 것이 일반적임
2. Build Context
💡Widget Tree
[1] |
부모 - 자식 관계의 위젯들이 연속적으로 중첩되어 위젯 트리를 구성함
💡Build Context
각 위젯은 고유한 Build Context를 가지고 있는데, Build Context는 위젯 트리에 대한 정보, 위젯의 위치, build와 관련된 기본 정보 (최대 / 최소 플러터 버전, 화면 크기 등) 등을 제공
3. Widget Life Cycle
stateless widget은 바로 build하면 되므로 생명 주기(life cycle)를 생각할 필요가 없지만, statefule widget은 state를 관리하므로 복잡한 생명 주기를 가지고 있음
[2] |
- initState : 앱이 빌드될 때 최초로 한 번만 호출, build 메서드보다 선행해야 함
- build : 위젯을 화면에 표시하는 메서드
- setState : 위젯의 상태를 갱신하는 메서드
- didUpdateWidget : 위젯의 설정이 변경될 때 호출되는 메서드
- dispose : 화면에서 위젯이 삭제될 때 호출되는 메서드
4. References
[1] https://blog.logrocket.com/complete-guide-flutter-architecture/
[2] https://mobikul.com/lifecycle-of-a-flutter-app/
https://nomadcoders.co/flutter-for-beginners/lobby