플러터 context 는 어디다 써먹나, context를 입력해서 써야하는 함수

HeejinShin·2022년 8월 9일
0

플러터

목록 보기
1/11

context란?

?
부모 위젯이 무엇인지를 알려주는 (담고있는) 변수이다.


print(context.findAncestorWidgetOfExactType<MaterialApp>())

>>> MaterailApp 출력됨 

context를 입력해서 써야하는 함수

  • showDialog(context)
  • Scaffold.of(context)
  • Navigator.pop(context)
  • Theme.of(context)

왜 context의 동작원리를 알아보았나

void main() {
  runApp(
      MaterialApp(

?
showDialog() 함수를 버튼에 집어넣어서 버튼을 누르면 창이 뜨는 기능을 구현해보고 있었는데, 이게 뜨지 않았다. 그 해결 방법으로는 Scaffold 위의 MaterialApp 함수를 Stateful위젯 바깥으로 끄집어내줘야 하는 것이었고 위처럼 main함수에 갖다 놓고 코드를 수정했더니 showDialog가 잘 동작했다. 필수 인자인 context값이 존재해야 하고, context가 가진 값은 부모위젯이니까 부모 위젯이 존재하려면 Material위젯을 바깥으로 빼야 했던 것이다.

!
다만 이렇게 레이아웃을 수정해주기 싫다면, 중간에 context를 생성해주는 위젯이 존재한다.
바로, Wrap with builder -> context 생성기다. 이를 통해 생성된 context에는 해당 위치 위의 부모들이 전부 담긴다. Scaffold, MaterialApp...

관련코드

context와 관련하여 생길 수 있는 기능 오류와 동작 원리에 대해서 알게 되었다.

profile
Studying Go Lang

0개의 댓글