BuildContext?! | Flutter로 디코딩하기

valas·2022년 1월 25일
0

플러터 디코딩

목록 보기
4/6

동영상

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'에 접근함으로서, 빌드 메서드는 이런 일을 할 수 있다.

  1. 어떤게 내 부모위젯이지?
  2. 내 크기는?
  3. 테마위젯이 내 위에 있나?
  • BuildContext가 그래도 먼지 모르는 얘들아 봐바

핸드폰의 아마존앱에서 무언가를 삿어.
아마존은 네가 build 하려는 것이야.
아마존은 주문을 받고 창고로 네가 주문한 상품을 보내.
창고는 BuildContext이고 모든 정보를 가지고 있어. 네가 궁금한게 있다면, 네 주문정보를 어마어마한 주문정보를 가진 창고한테 물어보면 되.
그 후 주문은 너한테 배송될거야.
BuildContext(창고)는 context(네 주문상품)을 트럭(State 관리자)에 담고 네 집 지역(정보가 표시될 화면)으로 간 뒤 집(Context가 호출한 기능)에 도착할꺼야

0개의 댓글