- [Flutter] BuildContext 목차
Context를 사용하면서 문제가 될 수 있는 부분을 정리하였다
1. Stateful Widget 내에서 context를 사용하는 것은 아무런 문제가 없다
class _MyHomePageState extends State<MyHomePage> {
void showDialog() {
context; <= 에러가 나지 않음
}
2. Stateless Widget 내에서 context 사용
class _MyHomePage extends StatelessWidget {
void showDialog() {
context; <= 에러가 발생함
=> void showDialog( BuildContext context) {
즉, 함수를 호출할 때 context를 넣어주어야 한다.
3. Stateful Widget에 있는 initState() 함수에서 context를 사용해야 하는 경우
1) void initState() {
super.initState();
context; <= Build를 하면 준비가 되지 않은 context를 사용한다고 에러가 발생
2) 사용할 수 있는 방법은
@override
void initState() {
super.initState();
Future.delayed(Duration.zero).then((_) {
final color = Theme.of(context).primaryColor;
});
}
Future를 사용함으로 Stateful 위젯내에 있는 내용을 실행한 후에 Futre가 동작함으로 context 내용이
채워져 있다
@override
void didChangeDependencies() {
super.didChangeDependencies();
final color = Theme.of(context).primaryColor;
}
context나 위젯의 inheritance가 변경되면 자동으로 콜백되는 함수를 사용해도 된다
4. Scaffold.of(context) 등의 of(context)를 사용하는데 context가 맞지 않다고 니오는 경우는
Scaffold.of(context).showSnackBar(
SnackBar(
=>
Builder(
builder:(context) {
return
....
Scaffold.of(context).showSnackBar(
SnackBar(
....
Builder( )를 사용하여 SnackBar에서 사용하고자 하는 context를 만들어 주면 된다
참고 영상) www.youtube.com/watch?v=gWOkEh3GJ3g&t=134s
'flutter' 카테고리의 다른 글
[Flutter] SafeArea 위젯 (0) | 2020.10.11 |
---|---|
Dart map() 함수 & ... 함수 (0) | 2020.10.07 |
[Flutter] Stream 사용법 (0) | 2020.10.04 |
[Flutter] Future async & await 사용법 (0) | 2020.10.04 |
[Flutter] ChangeNotifier provider 사용법 (0) | 2020.10.03 |