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 존재
-------
'✏️ > Flutter' 카테고리의 다른 글
[flutter][dart] map<T> method (0) | 2021.04.18 |
---|---|
[flutter] CocoaPods install error - `.symlinks/plugins/~ (0) | 2021.04.15 |
[flutter] ios 프로젝트 설정 오류 - Runner config, CocoaPods (0) | 2021.04.15 |
[flutter] The application's Info.plist does not contain CFBundleVersion. 에러 해결 방법 (0) | 2021.04.15 |
[flutter] Stateful vs Stateless Widget (0) | 2021.02.02 |