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

Seung Min Liang님의 프로필 이미지
Seung Min Liang

작성한 질문수

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

SplashScreen 구현해보기

스플래시 스크린에서 init state 와 build 순서

작성

·

535

0

강의를 보다가 궁금한 점이 있어 질문 남깁니다.

init state 메소드가 build 메소드 보다 먼저 실행된다고 알고 있습니다.

await 키워드를 사용하면, 비동기 함수가 완료될 때까지 기다리는 것으로 알고 있습니다.

 

제가 최종적으로 질문하고 싶은 부분은,

await 키워드가 있으니, init state 가 순차적으로 실행될 때까지 기다릴 것이다. 결국 build 함수가 실행되기 전에 라우팅이 일어나기 때문에, splash screen 은 화면에 보여지지 않는 것이 아닌가요?

답변 1

0

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

안녕하세요.

"initState() 함수 내부에 await 키워드를 사용하는 함수를 실행하면 build() 함수가 실행되기전에 initState의 모든 비동기 함수들이 실행될것이다"가 생각하시는 가정 맞을까요?

결론만 말씀드리면 initState 함수는 비동기로 실행이 안됩니다. 이부분은 제가 초급에서 언급했는지 중급에서 언급했는지는 잘 기억이 나지 않네요.

간단히 테스트해보는 방법은 initState 함수에 5초간 기다리는 딜레이함수에 콜백을 실행해서 프린트를 해보고 build 함수가 실행될때 프린트를 해보면 프린트되는 순서를보고 가정이 맞는지 확인해보실 수 있습니다!

initState 내부의 함수가 동기로 실행된다는 것이면,

build 함수가 실행되기 전에 initState (initState 안의 비동기 함수)가 완료 될 것이고,

build 함수가 호출안되는거 아닌가요..?

 

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

말씀드렸다시피 initState는 비동기로 실행 안됩니다~

테스트 한번 해보세요!

저도 같은 질문인데요.

동기로만 실행이 된다면 결국, initState가 끝날때까지 build가 호출되지 않는거 같은데요.

위 질문자님도 저랑 같은 생각같습니다.

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

넵 맞습니다. 동기는 기다렸다가 build() 함수가 실행되지만 '비'동기는 그렇지 않습니다!

Seung Min Liang님의 프로필 이미지
Seung Min Liang

작성한 질문수

질문하기