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

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

박진혁님의 프로필 이미지
박진혁

작성한 질문수

[Bloc 응용] 실전 앱 만들기 (책 리뷰 앱) : SNS 로그인, Firebase 적용, Bloc 상태 관리, GoRouter

초기 페이지 연결하기

개남님 초기 페이지 연결하기 부분 질문입니다!

해결된 질문

작성

·

243

0

개남님 좋은 강의 감사합니다. 현재 초기 페이지 연결하기까지 진행했습니다. 조금 오류가 있는 것 같은데 순수하게 궁금해서 여쭙니다!

main.dart에서 AppDataLoadCubit을 lazy:false로 뒀잖아요? 그럼 앱을 처음 다운 받았을 때 init page가 보여지고 lazy가 false이기 때문에 스플래시 화면에 도달하기 전 이미 데이터를 로드해서, 시작하기 버튼을 눌러 스플래시 화면에 도달했을 때면, 바로 로그인 체크 중 입니다..가 보여야 하는 것 아닌가요?? 제 에뮬레이터에는 데이터 로드 중 입니다..가 보이길래 영상을 다시 돌려봤는데 개남님도 같은 현상이십니다. 그리고 시작하기 버튼을 통해 init -> splash에 도달했을 때 새로고침하지 않으면 데이터 로드 중 입니다..에서 로그인 확인 중 입니다..로 바뀌지 않습니다. 단순 오류인가 해서 앱을 지워 hydrated bloc을 초기화하고 다시 확인해 보았지만 같은 현상이 일어납니다.

답변 2

0

개발하는남자님의 프로필 이미지
개발하는남자
지식공유자

안녕하세요 

우선 문제에 대해 제보주셔서 감사합니다.

소스코드를 확인해보니 문제점이 발견되었습니다. 

우선 lazy 옵션을 false로 되어있기 때문에 앱이 실행되면서 바로 데이터로드를 하게 됩니다. 

앱 실행시 splash_page가 첫 페이지라고 한다면 큰 문제 없이 로그인 체크로 진행이 되겠지만 

앱 실행시 init_page가 첫 페이지면 문제가 발생하게 됩니다. 

이유는  AppDataLoadCubit 상태를 구독하여 프로세스를 진행시키는 소스인 BlocListener 가 

splash_page에 있기 때문입니다.  

이해를 돕기 위해서 시간 흐름대로 데이터 처리가 어떻게 되는지 그려보자면 

image위 그림 처럼 우측은 init_page로 랜딩 되었을때 이미 AppDataLoadCubit 상태가 완료상태로 바뀌게 됩니다. 

사용자가 시작하기 버튼을 통해 splash_page로 변경되면 그때 AppDataLoadCubit을 구독하게 됩니다. 

하지만 이미 상태가 완료 상태라 listener가 호출되지 않게 되면서 인증체크 프로세스로 넘어가지 않게 되는 것입니다. 

 

이를 수정하기 위해서는 AppDataLoadCubit 을 lazy 옵션을 제거해주시면 되겠습니다. 

 

다시한번 버그 제보 감사드립니다 ^^ 

0

박진혁님의 프로필 이미지
박진혁
질문자

그냥 lazy 옵션을 제거하고, splash screen을 stf 위젯으로 바꾼다음 initstate에서 loadData 함수를 부르니까 해결됐는데 뭐가 문제여서 그랬을까요?? 아마 개남님 git에 업데이트 commit 초기 페이지 개발완료 부분 찾아 보시면 똑같은 현상 발견하실 수 있을 거에요. 넘 궁금합니다 ? 좋은 강의 감사합니다.

박진혁님의 프로필 이미지
박진혁

작성한 질문수

질문하기