inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

RatingPagination FetchMore 적용하기

List 타입 에러

229

진표

작성한 질문수 6

0

[ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: type 'List<IModelWithId>' is not a subtype of type 'List<RatingModel>?' of 'data'
#0      CursorPagination.copyWith (package:codefactory_lecture/common/model/cursor_pagination_model.dart:28:14)
#1      Pagination.paginate (package:codefactory_lecture/common/provider/pagination_provider.dart:91:22)
<asynchronous suspension>

이건 디테일 스크린에서 rating을 fetchmore로 더 불러올때 나는 에러입니다.

[ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: type 'List<IModelWithId>' is not a subtype of type 'List<RestaurantModel>?' of 'data'
#0      CursorPagination.copyWith (package:codefactory_lecture/common/model/cursor_pagination_model.dart:28:14)
#1      Pagination.paginate (package:codefactory_lecture/common/provider/pagination_provider.dart:91:22)
<asynchronous suspension>

그리고 이건 restaurant_screen.dart에서 쭉 내려서 데이터를 더 불러오려고 할 때 에러입니다. 둘 다 비슷한 에러입니다.

 

        state = resp.copyWith(data: [
          ...pState.data,
          ...resp.data,
        ]);

페이지네이션 코드 중 이 부분에 문제가 있었고,

 

CursorPagination copyWith({
    CursorPaginationMeta? meta,
    List<T>? data,
  }) {
    return CursorPagination<T>(
        meta: meta ?? this.meta, data: data ?? this.data);
  }

여기서 List<T>? data의 타입이 맞지 않는 것 같습니다.

 

데이터 타입이 알맞게 각각 들어가야 할텐데, 자꾸 List<IModelWithId> 타입이 들어가는 거 같아요... 어느 부분을 고쳐야 할까요?

flutter 하이브리드-앱

답변 1

1

코드팩토리

안녕하세요!

혹시 타입을 State 클래스로 전달 한다음 받아보시겠어요?

그래도 안된다면 안되는 위치와 상황 정보와 함께 레포지토리 공유 부탁드립니다.

감사합니다!

0

진표

감사합니다!!

        final newState = CursorPagination<T>(
            meta: pState.meta, data: [...pState.data, ...resp.data]);
        state = newState;

혹시 이렇게 하라는 말씀이신가요?? 근데 뭐 어찌되었건 이렇게 했더니 에러가 해결되긴 했습니다. 사실, 여전히 데이터는 CursorPagination<RestaurantModel>, CursorPagination<RatingModel>이 아닌, CursorPagination<IModelWithID>로 받아지기는 합니다. 이게 정상인가요??

 

그리고 데이터가 CursorPagination<IModelWithID>로 받아지기 때문에 Rating 데이터 가져오는 코드에서

            if (ratingState is CursorPagination)
              renderRatings(models: List<RatingModel>.from(ratingState.data))

이런식으로 좀 다르게 했습니다. 이렇게 하니까 잘 되더라구요. if문에 CursorPagination<RatingModel>처럼 제너릭을 명시해서 제시하면 CursorPagination<IModelWithID>에 걸리지 않아서 Rating Card 위젯들이 렌더링이 안됩니다.

코팩님께서 oop를 활용하여 코딩하는 것을 가르쳐 주고 계신데, 제가 이런식으로 해결한 것이 oop를 제대로 활용한 것인지, 아니면 그냥 dynamic으로 대충 얼버무린것인지... 잘 모르겠습니다.

 

사실은 제가 코팩님 강의를 보면서 코드를 그대로 따라치고 있지는 않고 리버팟 v2버전 강의에서 보여주신것을 따라서 riverpod_annotation을 이용하여 코딩하고 있습니다. 그래서 에러가 날때마다 너무 무섭습니다 ㅋㅋ 강의랑은 다른 코드를 작성하고 있기 때문에 ㅠㅠ

0

코드팩토리

타입이 나오는데 dynamic인 경우는 없습니다. IModelWithId 타입이 뜬다고 하셨으니 IModelWithId 타입이고 dynamic 타입이 아닙니다.

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

0

25

0

FlutterSecureStorage 질문

0

25

0

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

0

74

2

관리자 기능에 대한 질문

0

96

2

part 'restaurant_model.g.dart';

0

91

1

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

0

54

2

2번 반환 상황 관련 질문

0

58

2

riverpod 3.0

0

139

2

Asset folder??

0

79

2

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

0

111

2

FutureProvider, StateNotifierProvider 선택 기준

0

68

2

컴포넌트 모델화

0

61

2

쿼리 파라미터

0

81

2

화면 안보임

0

64

2

PaginationListView

0

50

1

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

0

99

2

프로토타입이미지

0

59

2

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

0

82

2

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

0

102

2

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

0

64

2

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

0

104

3

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

0

75

2

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

0

81

2

코딩 작성 순서 관련 질문

0

83

2