해결된 질문
작성
·
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에 있기 때문입니다.
이해를 돕기 위해서 시간 흐름대로 데이터 처리가 어떻게 되는지 그려보자면
위 그림 처럼 우측은 init_page로 랜딩 되었을때 이미 AppDataLoadCubit 상태가 완료상태로 바뀌게 됩니다.
사용자가 시작하기 버튼을 통해 splash_page로 변경되면 그때 AppDataLoadCubit을 구독하게 됩니다.
하지만 이미 상태가 완료 상태라 listener가 호출되지 않게 되면서 인증체크 프로세스로 넘어가지 않게 되는 것입니다.
이를 수정하기 위해서는 AppDataLoadCubit 을 lazy 옵션을 제거해주시면 되겠습니다.
다시한번 버그 제보 감사드립니다 ^^
0
그냥 lazy 옵션을 제거하고, splash screen을 stf 위젯으로 바꾼다음 initstate에서 loadData 함수를 부르니까 해결됐는데 뭐가 문제여서 그랬을까요?? 아마 개남님 git에 업데이트 commit 초기 페이지 개발완료 부분 찾아 보시면 똑같은 현상 발견하실 수 있을 거에요. 넘 궁금합니다 ? 좋은 강의 감사합니다.