Inflearn brand logo image

Inflearn Community Q&A

kimvjgd05159606's profile image
kimvjgd05159606

asked

[Code Factory] [Intermediate] Flutter Real Practice! State Management, Cache Management, Code Generation, GoRouter, Authentication Logic, etc. Essential Skills to Become an Intermediate!

Redirection

setState 내부, 외부에 명령어를 담을 때의 차이가 궁금합니다.

Written on

·

392

0

안녕하세요 go router redirection 강의 듣고 있습니다.

onPressed의 setState 내부에 authState = !authState 를 넣거나, authState = !authState 를 실행하고 setState를 하는 방법에 어떤 차이가 있는 지 궁금합니다.

모두 겉으로 보기에는 잘 작동하는 것 같은데 무엇을 사용해야 더 효율적인 방법인가요?

 

ElevatedButton(
  onPressed: () {
    setState(() {
      authState = !authState;
    });
  },
  child: Text(authState ? 'logout':'login',),
),
ElevatedButton(
  onPressed: () {
    authState = !authState;
    setState(() {
    });
  },
  child: Text(authState ? 'logout':'login',),
),
flutter하이브리드-앱

Answer 1

1

codefactory님의 프로필 이미지
codefactory
Instructor

안녕하세요!

둘 모두 결과적으로 같기는 합니다.

왜냐하면 setState()는 build() 함수를 재실행해주는 함수이며 build() 함수를 재실행 할경우 기존에 변경돼있던 모든 변수값을 새로 반영해서 렌더링을 하기때문이죠.

setState()에 입력되는 콜백 함수도 실제로 setState() 실행과 동시에 바로 실행됩니다. 레퍼런스는 아래에서 봐 볼 수 있습니다.

https://api.flutter.dev/flutter/widgets/State/setState.html

하지만 개발자가 봤을때 직관적으로 느끼는 부분이 다릅니다. 변수 변경은 어디서든 할 수 있지만 setState()의 콜백 내부에 변수 변경을 입력한다면 build() 함수가 재실행되면서 확실히 해당 변수들의 값들이 변경된 상태로 새로 렌더링되기를 기대한다는 뉘앙스를 포함 할 수 있습니다.

감사합니다!

kimvjgd05159606's profile image
kimvjgd05159606

asked

Ask a question