• 카테고리

    질문 & 답변
  • 세부 분야

    모바일 앱 개발

  • 해결 여부

    해결됨

typedef를 사용하는이유?

23.11.21 21:33 작성 조회수 329

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를 매개변수로 받는 함수를 만들고 이를 하위 클래스에서 받게한 이유가 궁금합니다.

VoidCallback 또한 typedef입니다. 추가로 VoidCallback은 아무런 파라미터를 입력받지 않는 함수의 시그니처이기 때문에 이 시나리오에서 사용이 불가능합니다! 그래서 새로 생성한겁니다.

감사합니다.
voidcallback 정의를 보니 이해가 가네요!

/// Signature of callbacks that have no arguments and return no data.
typedef VoidCallback = void Function();