Flutter/2.0

Flutter의 BuildContext 알아보기

lgvv 2021. 8. 11. 15:19

Flutter의 BuildContext 알아보기

 

BuildContext는 Flutter 위젯 트리에서 매우 중요한 개념

 

BuildContext

흔한 에러 예시

 

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에서 호출하느냐에 따라 참조 가능한 위젯의 범위가 달라진다.