flutter context의 의미

도원·2022년 2월 21일
0

Flutter

목록 보기
2/3

Flutter에서 BuildContext란?

Flutter 공식 문서에 Widget tree 에서 현재 Widget의 위치 를 알 수 있는 정보라고 함.
이를 가지고 계층 구조를 만들어 나감.

위젯트리에 있는 위젯 위치라고 할 수 있다.
각각의 위젯은 고유의 BuildContext를 가지고 있다.

class BuildContextExample extends StatelessWidget {
  
  Widget build(BuildContext context) {
    print("BuildContextExample Context : ${context.hashCode}");
    return Builder(
      builder: (context) {
        print("Builder Context :${context.hashCode}");
        return FloatingActionButton(onPressed: () {
        Scaffold.of(context).showSnackBar(
          new SnackBar(
            backgroundColor: Colors.blue,
            content: Builder(builder: (context) {
              print("SnackBar Context : ${context.hashCode}");
              return Text('SnackBar}');
            }),
          ),
        );
      });
      },
    );
  }
}

Result

flutter: BuildContextExample Context : 143
flutter: Builder Context :421
flutter: SnackBar Context : 722

위의 코드처럼 각각의 위젯마다 BuildContext가 생성이 되는 것을 볼 수 있다.
이 때 builder를 사용해서 각각의 context를 하나의 위젯이 사용하는데, 하나의 context만 사용할 때의 문제가 있다.

Scaffold.of() called with a context that does not contain a Scaffold.

build가 호출되고 난 후 만들어지는 context는 Scaffold의 부모 위젯의 BuildContext이다. (build가 실행되는 시점에는 Scaffold가 생성이 되어 있지 않음)

즉, 아직 Scaffold의 BuildContext가 만들어지지 않았는데 Scaffold.of(context)로 찾으려고 하니 Context를 찾을 수 없다는 에러를 뿜어낸다.

그래서 이 부분은 builder 메소드를 사용하여 해결한다.
Builder 에서 부르는 context는 Scaffold가 만들어지고 나서의 BuildContext를 가지고 오기 때문에 코드상에서 불러도 오류가 나지 않는다.

profile
developer

0개의 댓글