inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!

PaginationListView 위젯 작업하기

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

266

엄태호

작성한 질문수 3

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 하이브리드-앱

답변 1

0

코드팩토리

안녕하세요!

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

감사합니다!

0

엄태호

State 클래스가 어떤건가요?

0

코드팩토리

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

Isar 마지막 업데이트는 2년전입니다.

0

30

0

FlutterSecureStorage 질문

0

31

0

Dio onError Interceptor 만드는 부분에 질문이 있습니다.

0

79

2

관리자 기능에 대한 질문

0

100

2

part 'restaurant_model.g.dart';

0

92

1

36강. dio 인터셉터에 storage를 전달하는 코드가 이해 안되는데요. 도움 부탁드립니다.

0

56

2

2번 반환 상황 관련 질문

0

61

2

riverpod 3.0

0

139

2

Asset folder??

0

82

2

디자이너와 협업 시 프레임 크기 설정 관련 질문

0

113

2

FutureProvider, StateNotifierProvider 선택 기준

0

70

2

컴포넌트 모델화

0

64

2

쿼리 파라미터

0

84

2

화면 안보임

0

67

2

PaginationListView

0

54

1

강의중 37.Dio onErrorInterceptor 작업하기 dio 관련 질문입니다.

0

101

2

프로토타입이미지

0

62

2

여러 객체를 상태 관리하는 방법에 대한 질문

0

84

2

장바구니 결제하기 응답이 500이 옵니다.

0

105

2

removeFromBasket에서 await patchBasket()을 마지막에 하면 에러나는거 아닌가요?

0

67

2

이 두가지는 완전히 동일한 기능인가요?

0

106

3

내부 코드를 작성하지 않은 CursorPaginationLoading가 어떻게 로딩상태를 갖는지 잘 모르겠습니다...

0

77

2

_SplashScreenState에서 storage를 late로 호출해서 한번만 불러와도 되나요?

0

86

2

코딩 작성 순서 관련 질문

0

88

2