피드로 돌아가기
Dev.toMobile
원문 읽기
BuildContext의 정체를 Element 트리 노드로 파악하고 Navigator 탐색 메커니즘을 이해
The Context Behind the Context: How Flutter Navigation Really Works
AI 요약
Context
대부분의 Flutter 개발자는 BuildContext를 단순히 위젯 참조로 이해한다. 이 오해는 내비게이션 버그의 근본 원인이 된다. Flutter는 Widget 트리 외에 Element 트리와 RenderObject 트리를 병렬로 유지하며, BuildContext는 실제 런타임 노드인 Element이다.
Technical Solution
- BuildContext → 런타임에 마운트된 Element 노드임을 명확히 구분
- Navigator.of(context) → 상위 Element 트리를 순차 탐색하여 NavigatorState 발견 시 반환
- NavigatorState → Route Stack과 Overlay Stack이라는 두 자료구조를 소유하고 관리
- context.findAncestorStateOfType() → 선형 탐색으로 O(depth) 복잡도 가짐
- GlobalKey 기반 NavigationService → BuildContext 의존 없이 어느 위치에서든 내비게이션 가능
Impact
없음
Key Takeaway
BuildContext는 위젯이 아닌 위치 정보를 가진 실제 Element 노드이며, Navigator.of()는 이 트리 구조를 역으로 올라가며 상태를 찾는 구조화된 탐색 시스템이다.
실천 포인트
Flutter 앱에서 내비게이션 구현 시 BuildContext가 실제 마운트된 Element 트리 노드임을 인식하고, Navigator.of() 호출 위치에 따라 탐색 성공 여부가 결정되므로 GlobalKey 기반 NavigationService 패턴을 적용 시 위치 제약 없이 예측 가능한 내비게이션이 가능