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

bubble gun님의 프로필 이미지
bubble gun

작성한 질문수

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

onSaved의 타입

작성

·

277

0

안녕하세요.
중급까지 다 듣긴했는데 프로젝트 중, 폼필드 부분에 복습을 할 필요성이 생겨 돌아와서 보던중 궁금한 점이 생겨서 질문드립니다.

onSaved의 타입이 현재의 플러터(3.7.11) 혹은 다트(2.19.6)에서 확인을 해보면 text_form_field.dart에서 내용이 저는

ValueChanged<String?> onFieldSubmitted,
super.onSaved,
super.validator,

로 표기가 됩니다.

text_form_field.dart 에서는 FormFieldSetter<String> 에 해당하는 타입이나 문구는 cmd+f를 해서 찾아보아도 나오진 않아요.

다만 Form 위젯의 정의에서는 타입데프로 나오긴 하며, 강의에서 처럼 onSaved를 매개변수로 받아 외부에서 입력하도록 했을때 FormFieldSetter<String>로 해도 작동은 하네요.

버전이 바뀌며 변경이 있었던 건지 이 부분은 왜 text_form_field.dart에서 찾을 수가 없는지 궁금합니다. 또한 이런 경우 Form위젯을 뒤지지 않고도 적절한 타입을 찾을 수 있는 방법을 알고 싶습니다.
감사합니다.

 

 

 

답변 1

0

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

안녕하세요!

하나의 파일에서 CMD + F로 정의를 찾는건 의미가 없습니다.

이건 아마 직접 작업하신 프로젝트에서도 같을겁니다.

어떤 파일은 모델 정의만 두기도하고 어떤 파일은 typedef만 정의하기도 합니다.

그리고 여러 파일에서 정의한 값들을 또 다른 파일에 불러와서 로직을 작성하죠.

그렇기때문에 한 파일에 모든 정의가 있을 이유는 없습니다.

하지만 IDE에서 제공해주는 정의로가기 기능을 사용하시면 (CMD + 마우스 왼쪽 클릭) 정확히 정의의 위치로 이동 할 수 있습니다.

그렇기때문에 제가 강의에서 정의를 보여드릴때 항상 정의로가기 기능을 사용해서 보여드리는겁니다.

질문 하신 내용이 이게 아니라면 다시한번 질문 주세요!

감사합니다!

bubble gun님의 프로필 이미지
bubble gun
질문자

답변 감사드립니다. 당연히 정의로가기(cmd+b, cmd+우클릭)에서 찾아볼때를 말씀드린것입니다.

declaration or usage 를 통해 나오는 파일(이번의 경우는 text_form_field.dart)에서 가끔 이렇게 다른파일에서 정의한 값을 가져다써서 원하는 정보를 한 번에 찾을 수 없을때가 있습니다.
그럼 계속 그 속에서 cmd+b를 반복해서 타고 들어가보거나 그래도 없으면 마지막에 cmd+f까지 해보게 됩니다.
아까 질문에서 cmd+f를 언급한것도 그런 의미였습니다. 정의로가기에서 나오는 코드는 기본 500줄에서 많게는 1000줄이 넘어갈때도 있어서 혹시나 놓친게 있을까 싶어서요.

한 파일에 모든 정의가 있을 이유가 없는 것은 이해가 됩니다.
다만, 이번의 강의의 예시처럼
text_form_field.dart에서 현재에는 나오지 않는 onSaved의 FormFieldSetter<String> 같은 경우, 이것을 어떻게 form.dart에 도달해서 찾을 수 있는지 궁금했던 것입니다.
감사합니다.

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

제가 정확히 이해한건지 모르겠는데 한번 봐보시고 질문하신게 이게 아니면 다시 질문 한번 해주세요! TextFormField의 정의로 가기를 하면 text_form_field.dart로 이동합니다. TextFormField의 생성자 정의에는 super.onSaved, super.validtor가 존재합니다. 둘중 어느 값이든 정의하기를 하면 부모 생성자인 FormField 클래스의 this.onSaved 및 this.validator로 이동되며 이 클래스는 form.dart에 있습니다. 여기서 this.onSaved나 this.validator에서 또 정의로가기를 해보면 정상적으로 FormFieldSetter<T>로 이동됩니다. FormFieldSetter 타입에 정의로가기를 하면 form.dart의 FormFieldSetter의 typedef로 이동되구요. 저는 정상적으로 보이는데 혹시 문의하신 부분이 이게 아니라면 다시 질문 주세요!

bubble gun님의 프로필 이미지
bubble gun

작성한 질문수

질문하기