작성
·
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 + 마우스 왼쪽 클릭) 정확히 정의의 위치로 이동 할 수 있습니다.
그렇기때문에 제가 강의에서 정의를 보여드릴때 항상 정의로가기 기능을 사용해서 보여드리는겁니다.
질문 하신 내용이 이게 아니라면 다시한번 질문 주세요!
감사합니다!
제가 정확히 이해한건지 모르겠는데 한번 봐보시고 질문하신게 이게 아니면 다시 질문 한번 해주세요! 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로 이동되구요. 저는 정상적으로 보이는데 혹시 문의하신 부분이 이게 아니라면 다시 질문 주세요!
답변 감사드립니다. 당연히 정의로가기(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에 도달해서 찾을 수 있는지 궁금했던 것입니다.
감사합니다.