BuildContext의 인스턴스라고 이해하면 된다
context 이름은 마음대로 지정해도 된다
위젯트리에서 현재 위젯의 위치를 알 수 있는 정보
Build 함수는 Scaffold라는 위젯을 리턴하는데 이 때, 위젯트리 상에서 어디에 위치하는가에 대한 정보를 가지고 있는 context라는 것을 넣어서 리턴을 해준다
이 BuildContext는 stateless 위젯이나 state 빌드 메서드에 의해서 리턴된 위젯의 부모가 된다
"Scaffold.of() called with a context that does not contain a Scaffold"
위젯트리상에서 Scaffold 위치가 필요한 경우 Scaffold의 context를 참조하면 위 에러가 뜬다
Scaffold.of(context) .showSnackBar()
현재 주어진 context에서 위로 올라가면서 가장 가까운 Scaffold를 찾아서 반환하라
바로 Scaffold 안에 Scaffold.of(context)를 하면 MyPage의 context위로 가장 가까운 Scaffold를 찾는다.
Scaffold.of() 메서드가 위젯트리에서 Scaffold보다 밑에 있는 context를 사용할 수 있게 해야한다 => Builder 메서드 사용!
Builder(builder: (BuildContext context){
return (
...
Scaffold.of(context)...
...
);
},)
class MyPage extends StatelessWidget {
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Snack Bar'),
centerTitle: true,
),
body: Builder(
builder: (BuildContext ctx) {
return Center(
//Flat button, Raised button, Floating action button 디자인과 모양만 다를 뿐 기능상으론 비슷
child: FlatButton(
child: Text(
'Show me',
style: TextStyle(color: Colors.white),
),
color: Colors.red,
onPressed: () {
Scaffold.of(ctx).showSnackBar(SnackBar(
content: Text('Hello'),
));
},
),
);
},
));
}
}