작성
·
220
·
수정됨
1
안녕하세요? 강사님,
중급강의 섹션 13. [Go Router v7] GoRouter 이론 중 "Redirection" 파트에 관련된 질문인데요.
9_login_screen.dart 파일(LoginScreen 클래스)에 코딩된 "authState"는
router.dart파일에 코딩된 "authState"와 어떤 관계(?)인지를 모르겠습니다.
무슨말인가 하면 authState 변수는 LoginScreen 클래스내에서 별도로 선언을 해주지도 않았는데도 setStat를 이용해서 값을 ture, false로 바꿀 수 있는 것도 이상하고,
이렇게 LoginScreen 클래스에서 변경된 authState값이 router.dart파일에서 인식(?)이 되는것도 이상합니다.
제 질문이 조금 무식해 보이긴 한데...
제 질문 의도는 파악하셨으리라 생각되어서 답변 좀 부탁드리겠습니다...
답변 1
0
안녕하세요!
이 부분은 영상에서도 설명 드렸는데 authState가 파일간 특별한 관련이 있는건 아닙니다.
authState는 인증 상태를 단순화하여 true/false로 표현한 변수입니다.
실제 상황을 만든다면 인증 시스템을 전부 구축해야하기 때문에 단순히 변수의 값이 true면 인증이 된 상태고 false 면 인증이 되지않은 상태라는 가정을 한겁니다.
말씀하신대로 authState는 setState()와 관련은 없습니다.
하지만 setState()를 실행하면 build() 함수가 재실행되고 authState가 토글 됨으로서 (true->false 또는 false -> true)
로그인 상태에 따른 UI 변경을 가져올 수 있습니다.
실제 상황을 구현한다면 모두 provider에 저장될 상태 값입니다.
혹시 설명이 부족하다면 댓글 부탁드립니다.
감사합니다!
setState() 함수가 State 클래스 내부에 있는 값을 변경 할 수 있는 함수라고 인식하셔서 이해가 어려우신 것 같습니다.
setState() 함수는 특별한 함수가 아닙니다. '그냥 함수'입니다. 다트언어에 '특별한 함수'는 존재하지 않습니다. 초급 강의에서 설명드린 것 처럼 setState() 함수는 단순히 build() 함수를 재실행하는 역할을 합니다.
그렇기 때문에 말씀하신 코드의 역할은 authState 변수를 변경하고 setState() 함수를 재실해아는 역할을 할뿐입니다.
물론 State 클래스에 authState 변수를 선언할수도 있습니다. (이렇게 되면 이해가 좀 더 편하시겠죠) 하지만 그렇다면 다른 클래스에서 사용하기 어려워집니다 (커리큘럼 진행상). 그래서 글로벌 변수로 사용 했을 뿐입니다.
말씀하신 것 처럼 제가 setState() 함수가 State 클래스 내부에 있는 값만 변경할 수 있는 거라는 고정관념에 빠져 있었던 것 같습니다.. 설명주신 내용 이해했고, 자세히 설명 주셔서 정말 감사합니다..
좋은 하루 되세요~
답변 감사합니다.. 그런데 여전히 조금 이해가 안가서요...
다름이 아니고 제 질문의 요지는,
LoginScreen클래스 내에서 bool authState = true 이런 식으로 선언하지 않았는데도
(bool authState = true 라고 선언하는 부분은 router.dart 파일에 코딩되어 있음)
LoginScreen클래스 내에서 setState()로 authState 값을 (true->false 또는 false -> true)로 바꿀 수 있는 것도 이상하고,
(보통은 setState()값을 바꿀 때 해당 되는 변수는 해당 클래스 내에서 선언이 먼저 되어 있었던 것 같아서요.)
그래서 우선 LoginScreen 클래스 내에서 authState가 정의 되지 않았는데도, setState() 그 값을 변경 할 수 있는게 이상하고,
그리고 또 이상한건 이렇게 LoginScreen 클래스 내에서 authState의 값이 변경된게 router.dart 파일에서 인식이 되어서 기존에는 이동이 안되었던 PrivateScreen으로 이동을 할 수 되는게 이상해서 문의 드렸습니다...
마치 느낌상 authState 값이 Provider로 관리되고 있어서,
LoginScreen과 router.dart파일을 넘나들고 있는듯한 느낌입니다...;;;;
제가 질문 드리면서 너무 초보적인 질문을 드리는 것 같다는 생각이 들기도 한데, 어찌되었건,
그동안 학습하면서 배웠던 상황하고는 조금 달라서 문의 드립니다....