onSaved의 타입
309
작성한 질문수 21
안녕하세요.
중급까지 다 듣긴했는데 프로젝트 중, 폼필드 부분에 복습을 할 필요성이 생겨 돌아와서 보던중 궁금한 점이 생겨서 질문드립니다.
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 + 마우스 왼쪽 클릭) 정확히 정의의 위치로 이동 할 수 있습니다.
그렇기때문에 제가 강의에서 정의를 보여드릴때 항상 정의로가기 기능을 사용해서 보여드리는겁니다.
질문 하신 내용이 이게 아니라면 다시한번 질문 주세요!
감사합니다!
0
답변 감사드립니다. 당연히 정의로가기(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에 도달해서 찾을 수 있는지 궁금했던 것입니다.
감사합니다.
0
제가 정확히 이해한건지 모르겠는데 한번 봐보시고 질문하신게 이게 아니면 다시 질문 한번 해주세요! 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로 이동되구요. 저는 정상적으로 보이는데 혹시 문의하신 부분이 이게 아니라면 다시 질문 주세요!
198강 (){onTap(e);}의 이해 돕기
0
39
1
video_call 플러그인 설치후 에러 발생
0
47
1
SDK 안드로이드 설치 질문!
0
62
1
코드팩토리 디스코드 링크 다시 부탁드려요~
0
93
1
Webview를 이용해서 URL 상의 페이지 출력 불가
0
71
1
홈스크린 함수를 함축해서 main.dart에 옮기는 문제
0
56
1
플레이스토어
0
60
1
아고라 엔진 init 함수의 반환타입이 Future<void> 이것의 의미는 무엇인가요?
0
56
1
가이드라인 질문
0
59
0
emulator 에러 환경설정 뭐가 문제 일까요??
0
78
1
emulator 실행 오류
0
95
3
Column을 가로방향 최대 사이즈를 차지하도록 하는 방법에 관련
0
73
1
pubspec.yaml에서 font를 추가하면서 weight 값을 지정하는 것이 의미가 있는 것인지 문의
0
44
1
setState()를 호출하지 않으면 build가 실행 안되는 건가요?
0
54
1
video_call 플러그인 설치시 에러문제
0
67
1
children 안의 if 문에서 { } 못쓰는 이유?
0
51
1
이렇게 오류가 떠요
0
67
1
AppBar 사용했는데
0
63
2
[문제해결] '오늘도 출첵!' 의 171번 강의에서 중요한 문제를 발견했습니다
0
58
1
StatefulWidget 실습 에러가 발생합니다.[해결완료]
0
65
1
Video Player 프로젝트에 대한 추가 질문
0
54
0
Row위젯이나 column위젯의 위치는 누가 정하나요??
0
43
1
geolocator 오류때문에 개발진행이 불가능입니다
0
64
1
API 관련 이슈
0
89
2





