인프런 커뮤니티 질문&답변

유병길님의 프로필 이미지
유병길

작성한 질문수

[2024 최신] [코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!

setState 질문

작성

·

234

0

안녕하세요.

강의 잘 듣고있습니다..

강의 도중 ElevatedButton 에서 setState 를 할 시 TestWidget 의 build 가 실행되는데, setState 는 StatefulWidget 의 state 변경시 사용된다고 들었습니다.

근데, TestWidget 과 어떠한 연관도 없는데 TestWidget 의 build가 실행되는 이유가 뭔가요?

수업 중 들었던거 같기도한데... 그 부분 찾기가 어려워 질문남깁니다

답변 1

1

코드팩토리님의 프로필 이미지
코드팩토리
지식공유자

안녕하세요

setState() 함수는 State 클래스를 상속받을경우 제공되는 함수입니다!

setState()의 역할은 해당 함수가 제공된 클래스의 build 함수를 재실행하는게 목적입니다.

StatelessWidget과 StatefulWidget의 라이프 사이클을 비교해드린 제 강의를 기억해보시면 StatefulWidget은 StatefulWidget과 State 클래스 둘로 구성되어있다고 말씀 드렸습니다.

저희가 StatefulWidget을 사용할땐 StatefulWidget을 상속한 클래스를 사용하지만 사실 이 클래스는 createState() 함수를 통해 State 클래스를 반환하는 역할을 합니다. 그리고 build() 함수는 State 클래스에 존재하죠. StatefulWidget에는 build() 함수가 없습니다. 라이프 사이클에서 말씀드린것처럼 불변의 법칙때문에 그렇게 설계되어있습니다. 그러니 setState() 함수는 State 클래스의 build() 함수를 재실행하는거지 StatefulWidget의 build() 함수를 재실행하는게 아닙니다 (없습니다).

이건 매우 중요한 내용이니 방금 말씀드린 내용이 이해가 어렵다면 꼭 라이프사이클 강의를 다시 복습해보시길 바랍니다!

또 질문 있으시면 언제든 문의주세요!

감사합니다.

유병길님의 프로필 이미지
유병길
질문자

결국 HomeScreenState 의 build 를 재실행하면서 TestWidget(StatelessWidget) 도 다시 인스턴트를 만들면서 build 가 불러와진거군요..

감사합니다~!

유병길님의 프로필 이미지
유병길

작성한 질문수

질문하기