typedef를 사용하는이유?
이전 강의까지는 상위 class에 method를 생성해서 onTap() 함수를 넘겨줬는데 이번엔 전역으로 typedef로 선언한 이유가 있을까요?
typedef ColorIdSetter = void Function(int id);
class _ColorPicker extends StatelessWidget {
const _ColorPicker({
super.key,
required this.colors,
required this.selectedColorId,
required this.colorIdSetter,
});
final List<CategoryColor> colors;
final int selectedColorId;
final ColorIdSetter colorIdSetter;
@override
Widget build(BuildContext context) {
return Wrap(
runSpacing: 10,
spacing: 8,
children: colors
.map(
(e) => GestureDetector(
onTap: () {
colorIdSetter(e.id);
},
child: renderColor(e, selectedColorId == e.id),
),
)
.toList(),
);
}
답변 1
0
안녕하세요!
typedef는 함수가 아닙니다. typedef는 함수의 시그니처만 담고 있습니다. (제 Dart 언어 강의 참고해주세요)
함수는 실제 실행 로직을 담고 있는 기능입니다.
typedef는 시그니처만 담고 있기 때문에 일종의 타입으로 사용 될 수 있습니다.
그렇기때문에 당연히도 typedef 타입을 요구하는 값에 말씀하시는 '함수'를 입력 해줄 수 있습니다. (결국 어느 하나가 배제되는 상황 자체가 아닙니다)
감사합니다!
0
답변 감사합니다!
제가 궁금한 점은 typedef로 선언하지 않아도 상위 클래스에 method로 선언해서 넘겨줄 수 있는 코드인데 "굳이" typedef로 타입을 정의해서 넘겨준 이유가 궁금한 것 입니다.
기존 방식으로는 상위 클래스에 VoidCallback 메서드를 생성해서 아래로 내려보내려고 했지만 이번엔 typedef로 int id를 매개변수로 받는 함수를 만들고 이를 하위 클래스에서 받게한 이유가 궁금합니다.
1
VoidCallback 또한 typedef입니다. 추가로 VoidCallback은 아무런 파라미터를 입력받지 않는 함수의 시그니처이기 때문에 이 시나리오에서 사용이 불가능합니다! 그래서 새로 생성한겁니다.
0
감사합니다.
voidcallback 정의를 보니 이해가 가네요!
/// Signature of callbacks that have no arguments and return no data.
typedef VoidCallback = void Function();
198강 (){onTap(e);}의 이해 돕기
0
39
1
video_call 플러그인 설치후 에러 발생
0
47
1
SDK 안드로이드 설치 질문!
0
62
1
코드팩토리 디스코드 링크 다시 부탁드려요~
0
92
1
Webview를 이용해서 URL 상의 페이지 출력 불가
0
70
1
홈스크린 함수를 함축해서 main.dart에 옮기는 문제
0
56
1
플레이스토어
0
60
1
아고라 엔진 init 함수의 반환타입이 Future<void> 이것의 의미는 무엇인가요?
0
56
1
가이드라인 질문
0
58
0
emulator 에러 환경설정 뭐가 문제 일까요??
0
77
1
emulator 실행 오류
0
95
3
Column을 가로방향 최대 사이즈를 차지하도록 하는 방법에 관련
0
72
1
pubspec.yaml에서 font를 추가하면서 weight 값을 지정하는 것이 의미가 있는 것인지 문의
0
43
1
setState()를 호출하지 않으면 build가 실행 안되는 건가요?
0
54
1
video_call 플러그인 설치시 에러문제
0
66
1
children 안의 if 문에서 { } 못쓰는 이유?
0
50
1
이렇게 오류가 떠요
0
66
1
AppBar 사용했는데
0
62
2
[문제해결] '오늘도 출첵!' 의 171번 강의에서 중요한 문제를 발견했습니다
0
58
1
StatefulWidget 실습 에러가 발생합니다.[해결완료]
0
64
1
Video Player 프로젝트에 대한 추가 질문
0
54
0
Row위젯이나 column위젯의 위치는 누가 정하나요??
0
43
1
geolocator 오류때문에 개발진행이 불가능입니다
0
64
1
API 관련 이슈
0
89
2





