ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Flutter: 스낵바, BuildContext
    공부 기록/Flutter 2021. 11. 28. 00:13
    728x90

    강의 정리 (https://www.youtube.com/watch?v=-zxGPfjiQQA)

     

    context는 BuilderContext 클래스의 인스턴스이다. 아래 Person 클래스를 만들고 p1이라는 인스턴스를 생성한 예처럼, 인스턴스의  이름을 정의할 수 있는 것처럼 context도 인스턴스 이름이므로 이름이 변경 가능하다. 

     

    onPressed 함수에 Scaffold.of(context).shoSnackBar(snackBar(content:  xx )를 추가함 -> 다음 에러 발생. Scaffold를 포함하지 않은 contex가 호출되었다. 
    + 에러메시지 중에 다음 내용도 참고: The context used was: MyPage 

    왜 그럴까? scaffold가 사용하는 context를 찾아올라가야하는데, 해당 context는 Scaffold내에 있는 것이 아니라 MyPage에서 상속받은 MyPage의 context이다. (이전 17강 참조. context는 반환값이 아닌 상속받은 위젯의 context를 상속받는다) 

     scafold.of가  Scafold 위젯의 context을 찾을 수 있게하려면, (1) 위젯트리 상에서  Scafold 하위에 있는 context를 참조할 수 있도록 하면 된다. 2) 이를 위해 builder를 사용한다.  builder는 지금껏 사용한 context를 무시하고 새로운 컨텍스트를 만들어 그 컨텍스트로 위젯을 만든다. -> MyPage의 context가 아닌 Builder 위젯의 context를 사용하도록 하여, scafold.of 메소드가 Builder 위젯 위로 거슬러 올라가면서 Scafoold위젯을 찾을 수 있게됨 

    body에 있던 Center 위젯 대신에, builder로 아규먼트를 전달하고 리턴값으로 Center widget을 그대로 이동시킴. 여기서 새로 생성한 context 이름은 기존 MyPage의 context와 구분하기 위하여 ctx로 지정함

    이렇게 해야 버튼눌렀을때 스낵바 나타남

    댓글

Designed by Tistory.