본문 바로가기

✏️/Flutter

[flutter] BuildContext

728x90

 

BuildContext Class
위젯 트리에서 로컬 위젯을 핸들링하는 클래스

대부분의 위젯은 상위 위젯의 정보가 필요없이 만들어진다.

Widget build(BuildContext context) {
return ListView(
	children : <Widget> [
    	..
    ]
);
}

하지만, 하위 위젯이 동일한 빌드 메서드로 상위 빌드 컨텍스트가 필요한 경우가 있다.보통, Scaffold나 Navigator, ThemeData, MediaQuery와 같이 상속된 위젯 또는 상태 관리 메소드에 접근하는 경우에 필요하다.

Widget build(BuildContext context) {
return Scaffold(
	body : RaisedButton (onPressed: () {
    	Scaffold.of(context).showSnackBar(
        	SnackBar(context: Text('help!')),
        );
    }),
  );
}

이를 해결하기 위해, 하위 위젯 트리를 자체 빌드 메소드로 별도로 구성하는 방법을 쓰기도 한다.

이 코드의 경우 ScaffoldButton 이라는 클래스를 따로 만들어 독립형 위젯으로 나눈 경우인데, 너무 간단한 경우 위젯을 따로 나누는게 의미 없다고 느낄 수 있다.

이럴 때 Builder 위젯을 사용하면 된다.

위와 같은 코드의 경우, Scaffold.of는 주어진 빌드 컨텍스트에서 가장 가까운 Scaffold를 찾아 컨텍스트를 전달한다.


Builder 위젯은 필요할 때 업데이트된 빌드 컨텍스트를 가져오는 위젯

 

각각 widget 마다 고유의 buildcontext 존재

 

-------

www.youtube.com/watch?v=xXNOkIuSYuA