inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

TodayBanner 작업하기

TodayBanner 위젯에서 required 파라미터를 전달하지 않았는데 오류 없이 실행됩니다.

40

lgrsust

작성한 질문수 1

0

TodayBanner 위젯에서 required 파라미터를 전달하지 않았는데 오류 없이 실행됩니다.


📄 질문 내용:

안녕하세요. 수업 중에 위젯 간 데이터 전달 구조를 연습하면서 이상한 현상을 발견해서 질문드립니다.


현재 상황

제가 만든 TodayBanner 위젯은 아래와 같이 selectedDayrequired로 받도록 작성돼 있습니다:

class TodayBanner extends StatelessWidget {
  final DateTime selectedDay;

  const TodayBanner({
    required this.selectedDay,
    super.key,
  });

  @override
  Widget build(BuildContext context) {
    return Text('${selectedDay.year}년 ${selectedDay.month}월 ${selectedDay.day}일');
  }
}

복사편집

class TodayBanner extends StatelessWidget { final DateTime selectedDay; const TodayBanner({ required this.selectedDay, super.key, }); @override Widget build(BuildContext context) { return Text('${selectedDay.year}년 ${selectedDay.month}월 ${selectedDay.day}일'); } }

그리고 HomeScreen이나 다른 어떤 파일에서도 TodayBanner(selectedDay: ...)처럼 값을 전달해준 기억이 없고, 전체 프로젝트 검색으로도 그런 코드가 보이지 않습니다.

그런데도 앱 실행 시 아무런 에러도 없이 정상적으로 selectedDay 관련 값이 화면에 출력됩니다.


궁금한 점

  1. required 키워드가 있는 생성자에서 값을 전달하지 않으면 컴파일 타임에 에러가 나야 정상 아닌가요?

  2. 혹시 이전에 required 키워드를 빼놨다가 나중에 붙이고, hot reload 상태로 캐시가 꼬여서 생기는 현상일 수도 있을까요?

  3. 전역변수로 선언된 것도 없고, 다른 클래스에서 넘겨준 흔적도 없는데 이런 경우가 실제로 발생할 수 있는 구조인지 궁금합니다.


혹시 제가 놓친 부분이 있는 걸까요?

flutter 클론코딩

답변 2

0

코드팩토리

안녕하세요!

재시작 안하셔서 그런거 아닐까요?

required는 빌드타임 체크이기 때문에 실행시 에러가 없을수가 없습니다.

다시한번 확인 부탁드립니다.

감사합니다!

0

lgrsust

넵 ㅎㅎ 첫 질문인데 빠른 답변 감사드립니다. 확인해 보니 깐 강의 진행 중 아직 HomeScreen 위젯 트리에서 TodayBanner 위젯을 호출하지 않은 상황 이였고 그래서 빌드 실행 시 발생할 오류가 없어서 빨간줄이 안떴었던것 같네요 나중에 강의 끝까지 보면서 TodayBanner 호출 해줄 때 깨닳았습니다. 좋은 강의 올려주셔서 감사합니다 ~좋은 하루 되세요~

0

인프런 AI 인턴

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

required 키워드를 사용한 생성자에서 파라미터 값을 전달하지 않으면 일반적으로 컴파일 타임에 에러가 발생합니다. 하지만 말씀하신 상황에서 오류 없이 실행이 되는 이유는 몇 가지 가능성이 있을 수 있습니다.

  1. 잘못된 캐시 상태: hot reload를 여러 번 수행하거나, 코드 변경 후에 캐시가 정확히 반영되지 않을 경우 의도치 않은 상태로 남아 있을 수 있습니다. IDE나 빌드 시스템에서 build 혹은 run을 다시 시도하여 캐시를 재설정해 보십시오.

  2. 이전 코드 상태: hot reload 기능을 사용하다 보면 이전 상태의 코드가 남아 있을 수 있습니다. 이 경우, 전체 앱을 완전히 종료하고 새로 시작해 보세요.

  3. default parameter initializer 사용 가능성: selectedDay가 위젯 외부에서 초기화되거나, 디버깅 상에서는 드물게 발생할 수 있는 초기화에 따른 예외 처리가 있을 수 있습니다.

  4. IDE 및 도구의 문제: 사용 중인 IDE 또는 Flutter 도구가 최신인지 확인하세요. 도구나 플러터의 버그일 가능성도 배제할 수 없습니다.

해당 문제의 원인을 파악하기 위해 다음을 시도해 보세요:

  • Flutter 클린 명령어를 사용하세요: flutter clean을 터미널에 입력하여 프로젝트의 빌드 캐시를 초기화합니다.
  • 디버그 콘솔을 확인하여 실행 시 발생하는 모든 경고와 에러를 검사하세요.
  • IDE의 캐시를 지우고 프로젝트를 재설정하십시오.

아래의 유사한 질문들을 참고하면 추가적인 도움이 될 수 있습니다:

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

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

0

24

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

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