https://www.youtube.com/watch?v=rIaaH87z1-g&list=PLjxrf2q8roU1fRV40Ec8200rX6OuQkmnl&index=11
모든 위젯은 build(BuildContext context) 에서 만들어진다.
BuildContext는 무엇을 하는 애일까?
위젯은 UI의 한 부분으로 레시피의 재료나 Blueprint라고 할 수 있다.
위젯은 독립된 형태로 쓰이지 않고, 다른 위젯들과 관계를 가지고 있다.
그렇다면 위젯이 다른 위젯과 어떤 관계가 있고 트리구조에서 어디에 위치하는지 알 수 있을까?
모른다.
이유는 Blueprint는 어디서나 재사용될 수 있고, 위젯은 트리의 어디에 위치하는지 아무 정보도 갖고있지 않기 때문이다.
비밀은 BuildContext에 있다.
StatelessWidget이나 StatefulWidget 소스를 자세히 보면, 두 클래스는 Widget 클래스를 확장했음을 알 수 있다.
그 중 createElement 메서드가 있는데, 이것이 해당 위젯이 트리에서 어디에 위치하는지 추적하는 역할을 한다. 따라서 부모와 자식 위젯의 위치도 알 수 있다.
새 위젯을 만들면, 플러터 프레임워크는 createElement 메서드를 호출하고 이 위젯의 정보를 유지한다.
이 때, 이 Element는 효율적으로 각자를 대표하는 정보를 가진다.
이 Element가 BuildContext다.
MediaQuery같은 데 있는 context를 보게되면 내 위젯의 정보를 가진 놈이라고 생각하면 된다.
또는 build 할 때 필요한 정보를 가진 놈이라고 생각해도 된다.
context를 위젯에 전달하면, 실제로는 위젯의 element를 전달하게 되므로 어디에 위젯이 위치한지 알 수 있다.(좋아요 20개)
Q) Context가 그래도 먼지 모루겠소요
a) 다른 말로 Surroundings(주변의 어떤 정보를 가진 것). 'context'에 접근함으로서, 빌드 메서드는 이런 일을 할 수 있다.
핸드폰의 아마존앱에서 무언가를 삿어.
아마존은 네가 build 하려는 것이야.
아마존은 주문을 받고 창고로 네가 주문한 상품을 보내.
창고는 BuildContext이고 모든 정보를 가지고 있어. 네가 궁금한게 있다면, 네 주문정보를 어마어마한 주문정보를 가진 창고한테 물어보면 되.
그 후 주문은 너한테 배송될거야.
BuildContext(창고)는 context(네 주문상품)을 트럭(State 관리자)에 담고 네 집 지역(정보가 표시될 화면)으로 간 뒤 집(Context가 호출한 기능)에 도착할꺼야