inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!

화면에 동영상 보여주기

initializeController 내부 setState의 필요성

144

zhemgksl

작성한 질문수 3

0

4:24에서 "초기화된 상태를 반영해 주기 위해서 setState를 실행"해 준다고 하셨는데, intializeController은 initState 내부에서 호출되기 때문에 setState는 불필요하지 않나요?

 

initState 호출 뒤에 build함수가 호출되니까요.

 

감사합니다!

flutter 클론코딩

답변 3

0

코드팩토리

안녕하세요!

initState에서 async 기능을 실행할 경우 build 함수로 setState가 실행되기 전에 넘어 갈 수 있습니다.

추가로 life cycle 강의를 기억해보시면 setState를 포함한 모든 build를 재실행하는 함수는 절대적으로 clean 상태에서 실행돼야합니다.

dirty 상태에서 실행한다면 초보자가 흔히 보는 dirty 상태에서 build 재실행 불가하다는 에러가 필수적으로 발생합니다. 이 에러가 발생하지 않았다면 setState는 build가 이미 실행된 뒤에 실행됐다는걸 알 수 있습니다.

감사합니다!

0

zhemgksl

인프런 AI 인턴이 제공한 링크(setState 호출 시 build 실행 관련 질문)의 이전 답변에서 힌트를 얻었습니다.

 

제 생각의 흐름이 맞는지 한번 확인해 주시면 감사하겠습니다.

스크린샷 2024-11-27 00.53.05.png

 

  1. initState는 동기 함수이므로 initializeController 내부의 await videoPlayerController.initialize();가 채 실행 완료되지 않았는데 build 단계까지 갈 수 있다.

  2. 이런 경우를 대비하여 await videoPlayerController.initialize(); 이후에 setState((){});를 실행하여 초기화된 컨트롤러를 화면에 반영한다.

 

여기까지 제 생각이 맞다면 추가 질문이 있습니다

-> await videoPlayerController.initialize(); 이후에 setState((){});를 실행하는 대신, initState를 async 함수로 만들고 initializeController을 await하면 initializeController 내부의 await videoPlayerController.initialize(); 이후에 setState((){});를 실행하지 않아도 되나요?

 

다음과 같은 코드처럼 말이죠:

 

1.

ㄴㄹㅁㄴㅇㄹㄴㅁㅇㄹ

initState를 async 함수로 만듦.

 

2.

스크린샷 2024-11-27 01.02.27.png

대신 initializeController 내부에는 await videoPlayerController.initialize(); 이후의 setState((){});를 생략함.

 

감사합니다 : )

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다. zhemgksl님,

initializeController 함수 내부에서 setState를 호출하는 이유에 대해 궁금하신 것 같습니다. 이와 관련하여 비슷한 맥락의 질문과 답변을 찾아서 공유드립니다.

  1. initialize() 함수의 쓰임: initialize 함수가 컨트롤러를 초기화하는 역할을 하지만, 비동기 작업 때문에 상태 변화가 필요할 경우 setState를 통해 변경된 상태를 반영해야 하는 경우를 설명하고 있습니다.

  2. setState 호출 시 build 실행 관련 질문: setState()가 어떤 상황에서 build 함수를 다시 실행하도록 하는지에 대해 설명되어 있습니다. 여기에서 setState를 통해 왜 특정 시점에 상태 변화가 필요할 수 있는지를 상세히 이해하실 수 있습니다.

initializeController 함수가 비동기 작업을 포함하고 있다면, initState가 끝나고 build가 호출된 후에도 setState로 상태 변화를 반영하는 것이 필요할 수 있습니다. 비동기 작업 결과를 기반으로 화면을 업데이트해야 한다면 setState를 적절히 사용해야 할 수도 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

198강 (){onTap(e);}의 이해 돕기

0

19

1

video_call 플러그인 설치후 에러 발생

0

45

1

SDK 안드로이드 설치 질문!

0

59

1

코드팩토리 디스코드 링크 다시 부탁드려요~

0

92

1

Webview를 이용해서 URL 상의 페이지 출력 불가

0

69

1

홈스크린 함수를 함축해서 main.dart에 옮기는 문제

0

55

1

플레이스토어

0

59

1

아고라 엔진 init 함수의 반환타입이 Future<void> 이것의 의미는 무엇인가요?

0

55

1

가이드라인 질문

0

57

0

emulator 에러 환경설정 뭐가 문제 일까요??

0

76

1

emulator 실행 오류

0

93

3

Column을 가로방향 최대 사이즈를 차지하도록 하는 방법에 관련

0

71

1

pubspec.yaml에서 font를 추가하면서 weight 값을 지정하는 것이 의미가 있는 것인지 문의

0

43

1

setState()를 호출하지 않으면 build가 실행 안되는 건가요?

0

53

1

video_call 플러그인 설치시 에러문제

0

63

1

children 안의 if 문에서 { } 못쓰는 이유?

0

48

1

이렇게 오류가 떠요

0

63

1

AppBar 사용했는데

0

61

2

[문제해결] '오늘도 출첵!' 의 171번 강의에서 중요한 문제를 발견했습니다

0

56

1

StatefulWidget 실습 에러가 발생합니다.[해결완료]

0

63

1

Video Player 프로젝트에 대한 추가 질문

0

53

0

Row위젯이나 column위젯의 위치는 누가 정하나요??

0

42

1

geolocator 오류때문에 개발진행이 불가능입니다

0

62

1

API 관련 이슈

0

86

2