해결된 질문
작성
·
468
0
이전 강의까지는 상위 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 타입을 요구하는 값에 말씀하시는 '함수'를 입력 해줄 수 있습니다. (결국 어느 하나가 배제되는 상황 자체가 아닙니다)
감사합니다!
답변 감사합니다!
제가 궁금한 점은 typedef로 선언하지 않아도 상위 클래스에 method로 선언해서 넘겨줄 수 있는 코드인데 "굳이" typedef로 타입을 정의해서 넘겨준 이유가 궁금한 것 입니다.
기존 방식으로는 상위 클래스에 VoidCallback 메서드를 생성해서 아래로 내려보내려고 했지만 이번엔 typedef로 int id를 매개변수로 받는 함수를 만들고 이를 하위 클래스에서 받게한 이유가 궁금합니다.