플러터로 만든 앱은 위젯으로 이루어져 있다.
모든 위젯은 계층구조를 가진다.
모든 Widget들은 BuildContext를 가지고 있는데, 그 Widget의 최대, 최소 화면 크기 등의 정보가 담겨 있다.
하위 Widget에서 상위 Widget을 찾기 위해서 존재한다. 상위 Widget을 찾아서 어떤 작업을 해야 할 때가 있기 때문이다.
class MyApp extends StatelessWidget {
const MyApp({super.key});
Widget build(BuildContext context) {
return MaterialApp();
}
}
MyApp도 Widget이다. 모든 Widget은 build 함수를 가진다. build 함수는 Widget을 리턴한다. 이 때 상위 Widget은 MyApp이고, 하위 Widget은 MaterialApp이다. build 함수는 BuildContext를 매개변수로 받아 MaterailApp을 리턴한다.
상위 Widget의 BuildContext가 하위 Widget에 전달되고, 이런 방식으로 Widget Tree가 연결되어 있다.
따라서 저기 매개변수인 context는 MaterialApp의 context가 아니라 MyApp의 context이다. 즉 부모의 context이다. <-- 중요!