Flutter의 BuildContext 알아보기
BuildContext는 Flutter 위젯 트리에서 매우 중요한 개념

흔한 에러 예시
Flutter를 하다 보면 이런 에러를 종종 보게 된다.
Scaffold.of() called with a context that does not contain a Scaffold
이 에러는 context의 위치를 잘못 참조했을 때 발생
즉, 특정 위젯이 자신이 속한 트리 상의 Scaffold를 찾을 수 없다는 의미.
그럼 BuildContext가 도대체 뭘 의미하고, 왜 이런 문제가 생기는 걸까?
BuildContext란?
공식 Flutter 문서에서는 BuildContext의 정의
- BuildContext는 위젯 트리 내에서 위젯의 위치를 나타내는 핸들
- 즉, 위젯이 트리 구조에서 어디에 위치해 있는지를 알려주는 정보
구조적으로 이해하기
모든 Flutter 위젯은 build() 메서드를 가지고 있음.
build() 메서드는 항상 BuildContext 타입의 인자를 받음.
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('Hello')),
body: Center(child: Text('World')),
);
}
여기서 context의 의미는
- 해당 위젯이 트리 안에서 어디에 있는지를 나타내는 일종의 참조 포인터
왜 Scaffold.of(context) 에러가 날까?
예를 들어 이런 코드가 있다고 하자.
Scaffold(
body: Builder(
builder: (context) {
Scaffold.of(context).showSnackBar(
SnackBar(content: Text('Hello!')),
);
},
),
);
만약 Builder 위젯 없이 Scaffold.of(context)를 Scaffold보다 위쪽 context에서 호출한다면,
Flutter은 해당 위치에서 Scaffold를 찾지 못해 에러를 던진다.
즉, BuildContext는 부모-자식 관계를 따라 참조할 수 있는 구조이며,
어떤 context에서 호출하느냐에 따라 참조 가능한 위젯의 범위가 달라진다.
'Flutter > 2.0' 카테고리의 다른 글
| Flutter 2.0에서 버튼 위젯 변화 정리 (TextButton, ElevatedButton, OutlinedButton) (0) | 2021.08.13 |
|---|---|
| Flutter 2.0에서 ScaffoldMessenger와 SnackBar 변화 정리 (0) | 2021.08.12 |
| Flutter에서 Drawer 메뉴 만들기 (0) | 2021.08.10 |
| Flutter에서 AppBar 메뉴 아이콘 추가하기 (0) | 2021.08.10 |
| Dart에서 클래스(Class)와 생성자(Constructor) (0) | 2021.08.10 |