강의

멘토링

커뮤니티

Inflearn Community Q&A

wer061032192's profile image
wer061032192

asked

[Code Factory] [Intermediate] Flutter Real Practice! State Management, Cache Management, Code Generation, GoRouter, Authentication Logic, etc. Essential Skills to Become an Intermediate!

Working with the PaginationListView Widget

안녕하세요 제너릭 관련하여 질문이 있습니다.

Written on

·

258

0

 

 

안녕하세요. 해당 강의에 질문이 있어서 글을 남깁니다.

 

  1. 강의에 소개된대로 itemBuilder에 RestaurantModel 제너릭을 제공해준 경우

     


return PaginationListView(
      provider: restaurantProvider,
      itemBuilder: <RestaurantModel>(context, index, model) {
        return GestureDetector(
          onTap: () {
            Navigator.of(context).push(MaterialPageRoute(
              builder: (_) => RestaurantDetailScreen(
                id: model.id,
              ),
            ));
          },
          child: RestaurantCard.fromModel(model: model),
        );
      },
    );

 

  1. PaginationListView에 제너릭을 제공한 경우

     


return PaginationListView<RestaurantModel>(
      provider: restaurantProvider,
      itemBuilder: (context, index, model) {
        return GestureDetector(
          onTap: () {
            Navigator.of(context).push(MaterialPageRoute(
              builder: (_) => RestaurantDetailScreen(
                id: model.id,
              ),
            ));
          },
          child: RestaurantCard.fromModel(model: model),
        );
      },
    );

위 두가지 경우 중에 PaginationListView 소스를 확인하면 2번 항목이 맞는거 같은데 작동은 1번에서만 가능합니다.

 


typedef PaginaitonWidgetBuilder<T extends IModelWithId> = Widget Function(
  BuildContext context,
  int index,
  T model,
);

class PaginationListView<T extends IModelWithId>
    extends ConsumerStatefulWidget {
  final StateNotifierProvider<PaginationProvider, CursorPaginationBase>
      provider;
  final PaginaitonWidgetBuilder<T> itemBuilder;
  const PaginationListView({
    super.key,
    required this.provider,
    required this.itemBuilder,
  });

  @override
  ConsumerState<PaginationListView> createState() =>
      _PaginationListViewState<T>();
}

제가 생각한 해석방식은 이렇습니다.

  1. PaginationListView 생성 시 ImodelWithId를 extend 한T 타입을 제너릭으로 받습니다.

  2. 따라서 itemBuilder가 아닌 PaginationListView<RestaurantModel>과 같이 제너릭을 제공한 경우, 해당 타입을 PaginationWidgetBuilder에 매핑 됩니다.

 

 

위 해석방식에서 제가 틀리게 생각한게 있나요?

 

에러메시지는 아래와 같습니다.

 

The following _TypeError was thrown building:
type '(BuildContext, int, RestaurantModel) => GestureDetector' is not a subtype of type
'(BuildContext, int, IModelWithId) => Widget'

 

 

flutter하이브리드-앱

Answer 1

0

codefactory님의 프로필 이미지
codefactory
Instructor

안녕하세요!

혹시 State 클래스에 T 타입 전달을 안해줘서 그런게 맞을까요?

감사합니다!

wer061032192님의 프로필 이미지
wer061032192
Questioner

State 클래스가 어떤건가요?

codefactory님의 프로필 이미지
codefactory
Instructor

stateful widget의 상태 클래스인 state 클래스 말슴 드린거였습니다. 레포지토리 그대로 전달주시면 제가 봐드리겠습니다.

wer061032192's profile image
wer061032192

asked

Ask a question