인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

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

임명훈님의 프로필 이미지
임명훈

작성한 질문수

[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!

GoRouter Redirection관련 질문이 있습니다..

작성

·

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에 저장될 상태 값입니다.

혹시 설명이 부족하다면 댓글 부탁드립니다.

감사합니다!

임명훈님의 프로필 이미지
임명훈
질문자

답변 감사합니다.. 그런데 여전히 조금 이해가 안가서요...

 

다름이 아니고 제 질문의 요지는,

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파일을 넘나들고 있는듯한 느낌입니다...;;;;

 

제가 질문 드리면서 너무 초보적인 질문을 드리는 것 같다는 생각이 들기도 한데, 어찌되었건,

그동안 학습하면서 배웠던 상황하고는 조금 달라서 문의 드립니다....

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

setState() 함수가 State 클래스 내부에 있는 값을 변경 할 수 있는 함수라고 인식하셔서 이해가 어려우신 것 같습니다.

setState() 함수는 특별한 함수가 아닙니다. '그냥 함수'입니다. 다트언어에 '특별한 함수'는 존재하지 않습니다. 초급 강의에서 설명드린 것 처럼 setState() 함수는 단순히 build() 함수를 재실행하는 역할을 합니다.

그렇기 때문에 말씀하신 코드의 역할은 authState 변수를 변경하고 setState() 함수를 재실해아는 역할을 할뿐입니다.

물론 State 클래스에 authState 변수를 선언할수도 있습니다. (이렇게 되면 이해가 좀 더 편하시겠죠) 하지만 그렇다면 다른 클래스에서 사용하기 어려워집니다 (커리큘럼 진행상). 그래서 글로벌 변수로 사용 했을 뿐입니다.

임명훈님의 프로필 이미지
임명훈
질문자

말씀하신 것 처럼 제가 setState() 함수가 State 클래스 내부에 있는 값만 변경할 수 있는 거라는 고정관념에 빠져 있었던 것 같습니다.. 설명주신 내용 이해했고, 자세히 설명 주셔서 정말 감사합니다..

좋은 하루 되세요~

임명훈님의 프로필 이미지
임명훈

작성한 질문수

질문하기