inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

섹션 16, 상태 상위로 올리기에서 OnHeartPressed 함수 안의 showCupertinoDialog 함수내의 context 변수는 선언이 안되어 있는데 왜 컴파일 오류가 안나는건가요.

108

wegaia

작성한 질문수 2

0

안녕하세요,

제가 무식한 질문인지는 모르겠는데,

void OnHeartPressed () {

showCupertinoDialog (

context : context, // <== 요 항목에서 context 라는 변수는 어디서 온건가요.

 

}

Build() 함수 바깥에서 별도로 선언된 함수니까 Build 내의 인자인 context 를 의미하지는 않을텐데

왜 컴파일 오류가 나지 않고 잘 실행이 되는건지 궁금합니다.

함수 포인터로 사용되는거 인식해서 상위 함수에 context 가 존재해서 그러는건가요?

 

 

flutter 클론코딩

답변 2

0

코드팩토리

안녕하세요!

부모 위젯에서 제공해주는 기능입니다 (부모 위젯에 대한 정보는 제 Dart 언어 강의 참고 부탁드립니다)

StatelessWidget의 경우 부모 위젯에서 BuildContext를 제공해주지 않습니다. 그래서 함수에서 꼭 받아서 전달해야하지만. StatefulWidget의 경우 부모위젯에서 클래스 프로퍼티로 제공해줘서 사용 할 수 있습니다.

감사합니다!

0

인프런 AI 인턴

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

showCupertinoDialog에서 사용되는 context가 어디서 유래된 것인지 궁금하신 것 같습니다. Flutter에서는 BuildContext라는 개념이 매우 중요합니다. BuildContext는 위젯 트리 안에서 위젯의 위치를 나타내며, 위젯 트리의 부모-자식 관계를 이해하고 관리하는 데 사용됩니다.

OnHeartPressed 함수가 선언된 동일한 클래스나 위젯 내에서 context가 선언된 경우, 보통은 위젯의 생성자나 메서드를 통해 해당 BuildContext가 전달되었을 가능성이 큽니다. 일반적으로 다음과 같은 상황에서 context를 사용할 수 있습니다:

  1. StatefulWidget이나 StatelessWidgetbuild 메서드에서 context가 주어지는 경우.
  2. State 클래스에서 widget 속성을 통해 상위 위젯의 BuildContext에 접근하는 경우.

아마도 OnHeartPressed 함수는 build 메서드나 위젯 트리 내에서 호출되기 때문에, 해당 위치에서 BuildContext가 전달되고 있을 가능성이 큽니다.

이를 더 명확히 설명하기 위해서는 실제 코드 구조를 살펴봐야 할 필요가 있습니다. 그러나 일반적인 경우에, 위젯 트리의 구조 덕분에 BuildContext가 전달된다고 볼 수 있습니다.

유사한 질문이 게시판에 있었던 것 같습니다. “U&I onPressed 질문”에서 비슷한 맥락으로 함수와 context에 대한 논의가 이루어졌습니다. 확인해보시면 도움이 될 것 같습니다.

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

0

wegaia

어휴, 늦은 밤에 질문한것도 죄송한데 곧바로 긴 답변까지 주셨네요.

그래도 제가 좀 띨띨해서 조금 헷갈려서 제가 제대로 이해한건지 좀만 더 질문드려볼게요.

말씀하신걸로 유추해보면 build 메서드 내에서 _Top() 클래스(위젯)의 생성자의 OnPressed 매개변수로 OnHeartPressed가 지정이 되었으니 그 위젯 트리 내에서 호출이 되는것이므로 명시적으로 Buildcontext가 OnHeartPressed함수의 매개변수로 전달되진 않지만 컴파일러는 암묵적으로 BuildContext 타입의 객체인 context 를 처리할 수 있다는 말씀처럼 들립니다. 제가 말하고도 헷갈리네요.

어쨋든 늦은밤에 감사합니다.

유사한 질문이라고 하신 "U&I onPressed 질문"에선 콜백함수를 지정하는것과 콜백함수가 가리키는 함수를 실행하는 것에 대한 차이에 대한 질문인 것 같습니다.

0

wegaia

섹션 19, Navigator 사용해서 네이게이션 해보기 항목에 설명이 나와 있네요.

StatefulWiget 객체 내에서는 BuildContext 객체가 전역함수로 선언되어 있어서 각 함수 내에서 접근 가능하다는군요.

Stateless 객체 내에서는 불가능하답니다.

그래서 Build 함수 내에서 함수 호출시에 context 객체를 넘겨줘야 한다네요.

 

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

0

26

1

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

0

45

1

SDK 안드로이드 설치 질문!

0

60

1

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

0

92

1

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

0

70

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

64

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

63

1

API 관련 이슈

0

86

2