순한맛 17 아리송한 BuildContext 이해하기
코드상에서 에러가 전혀 뜨지 않는데 'Scaffold.of() called with a context that does not contain a Scaffold' 와 같은 에러가 뜰 때가 있음
> 이는 BuildContext 와 연관 있음
BuildContext 의 정의
1. widget tree 에서 현재 widget 의 위치를 알 수 있는 정보
2. 모든 위젯은 자신만의 BuildContext 를 가지는데, 이 BuildContext는 stateless 위젯이나 state 빌드 메서드에 의해서 리턴 된 위젯의 부모가 된다.
1. widget tree 에서 현재 widget 의 위치를 알 수 있는 정보

Widget 은 모두 build method 를 가지고 있음. 이를 통해서 계층 구조를 만들어 나감.

Widget = 함수의 Type.
즉, build 는 Widget 타입 method

build method에 들어오는 인자값은 BuildContext 타입의 context 인자값
> build method는 context 인자값을 Scaffold 위젯을 리턴한다는 뜻

2. 모든 위젯은 자신만의 BuildContext 를 가지는데, 이 BuildContext는 stateless 위젯이나 state 빌드 메서드에 의해서 리턴 된 위젯의 부모가 된다.

StatelessWidget 으로 MyPage 라는 커스텀 위젯 생성
이 MyPage라는 커스텀 위젯도 자신만의 BuildContext 타입의 context를 가지고 있음.

MyPage는 build 메소드를 통해서 Scaffold 위젯이 리턴이 됨.
이 때, Scaffold 위젯은 부모인 MyPage의 context 를 그대로 물려받게 된다.
만약, 어떤 필요에 의해 위젯 트리상 Scaffold의 위치가 필요하게 되었을 때, 현재 Scaffold 위젯의 context 를 참조하게 된다면?
> Scaffold.of() called with a context that does not contain a Scaffold 에러 발생
> Scaffold 위젯이 위젯 트리 상에서 어디에 위치하고 있는지 알기 위해선 Scaffold의 context를 참조하는 것이 기본임.
하지만 Scaffold 위젯의 context는 위젯 트리 내에서 Scaffold의 위치 정보를 가지고 있지 않음

> build method에 의해서 리턴된 Scaffold 위젯은 그 부모의 buildcontext 타입의 context를 물려받게 됨
Scaffold 위젯 밑에서 build method로 어떤 위젯을 리턴하면 그 위젯은 부모인 Scaffold 위젯의 진짜 context를 가진 위젯을 리턴함
이해하기론 상속을 받은 자식 위젯(조부모)의 context를 알기 위해선 자식의 자식(손주)이 부모(자식)로부터 물려받은 context 위젯을 받아야 알 수 있다는 것 같은데...
굉장히 헷갈린다. ㅠㅠ
'공부 > Flutter' 카테고리의 다른 글
| Flutter 스터디 8 Container Widget 되짚어보기, Column & Row Widget 되짚어보기 (0) | 2023.01.30 |
|---|---|
| Flutter 스터디 7 스낵바와 BuildContext, Builder 위젯 없이 스낵바 만들기와 토스트 메세지 (0) | 2023.01.26 |
| flutter 이미지/에셋 추가 시 생기는 Unable to load asset 오류 해결 (안드로이드 스튜디오) (2) | 2023.01.25 |
| Flutter 스터디 5 Drawer 메뉴 (0) | 2023.01.25 |
| Flutter 스터디 4 클래스와 위젯, AppBar 아이콘 (null safety 조금) (0) | 2023.01.19 |