작성
·
339
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',),
),
답변 1
1
안녕하세요!
둘 모두 결과적으로 같기는 합니다.
왜냐하면 setState()는 build() 함수를 재실행해주는 함수이며 build() 함수를 재실행 할경우 기존에 변경돼있던 모든 변수값을 새로 반영해서 렌더링을 하기때문이죠.
setState()에 입력되는 콜백 함수도 실제로 setState() 실행과 동시에 바로 실행됩니다. 레퍼런스는 아래에서 봐 볼 수 있습니다.
https://api.flutter.dev/flutter/widgets/State/setState.html
하지만 개발자가 봤을때 직관적으로 느끼는 부분이 다릅니다. 변수 변경은 어디서든 할 수 있지만 setState()의 콜백 내부에 변수 변경을 입력한다면 build() 함수가 재실행되면서 확실히 해당 변수들의 값들이 변경된 상태로 새로 렌더링되기를 기대한다는 뉘앙스를 포함 할 수 있습니다.
감사합니다!