컨텍스트란?
✅ 한 줄 정의
BuildContext
는 위젯 트리에서 해당 위젯의 위치를 나타내는 핸들이다.✅ 왜 중요한가?
Flutter는 모든 것이 위젯이고, 트리 구조로 구성되어 있습니다.
그 트리 속에서 어떤 위젯이 "자기 주변에 있는 위젯"을 참조하거나 기능을 수행하려면 context가 필요합니다.
✅ 사용 예시
상황 | 코드 | 설명 |
라우팅 (화면 전환) | Navigator.push(context, ...) | 현재 위치에서 Navigator 를 찾아서 사용 |
테마 접근 | Theme.of(context).textTheme | 부모 트리에서 Theme 정보를 가져옴 |
미디어쿼리 | MediaQuery.of(context).size | 디바이스 크기/방향 정보 가져옴 |
다이얼로그 | showDialog(context: context, ...) | 다이얼로그를 띄울 위치 지정 |
✅ context는 위젯의 생명주기와 연결
@override
Widget build(BuildContext context) {
return Text('Hello');
}
- 이
context
는Text
위젯이 어느 위치에서 빌드되는지를 나타냅니다.
- 이 context로부터 위로 올라가면서 필요한 위젯을 탐색할 수 있습니다 (예:
Theme
,Scaffold
,InheritedWidget
등).
✅ 주의할 점
initState()
에서는 context 사용하지 말기- 위젯이 아직 트리에 "올라가기 전"이므로
context
로 위를 탐색하면 에러 납니다. WidgetsBinding.instance.addPostFrameCallback
사용 필요.
builder
나showDialog
안의 context는 다른 context일 수 있음- 다이얼로그처럼 새로운 위젯 트리를 렌더링할 경우,
context
가 다를 수 있음 (앞서 설명한 내용 참고).
✅ 결론 요약
질문 | 답변 |
context란? | 위젯 트리에서의 위치 정보 (BuildContext 객체) |
왜 필요? | 위로 올라가면서 Navigator, Theme, MediaQuery 등을 찾기 위해 |
어디서 주로 쓰임? | 화면 전환, 테마 접근, 다이얼로그, 레이아웃 계산 등 |
주의할 점 | initState() 에서는 사용 불가, context가 어디의 context인지 항상 명확히 파악 필요 |
Share article