RestaurantRepository 안에 paginate( ) 함수를 만들었고,
이 함수는 // http://$ip/restaurant/ 이 URL에다가 요청을 보내는 함수임.
@RestApi( )라고 달아뒀기 때문에 .g.dart 파일에
요청 보내는 방식이 자동으로 코드가 짜였다.
이걸 사용해봐야겠지???
RestaurantDetailScreen에서 이렇게 RestaurantRepository를 그대로
가져다 쓴 것처럼 RestaurantScreen에서도 해보자.
① restaurant_screen.dart 수정하기
dio를 직접 사용하는 드래그된 부분을 삭제한다.
위에 accessToken도 이제 필요 없으니까 삭제해준다.
코드 삭제 완료!
② RestaurantRepository 사용하기
resp 받아와서 RestaurantRepository에다가 dio, baseUrl 넣어주기
③ Pagination 해주기
이어서 페이지네이션을 해 주면 된다.
이렇게 해 주면, resp(response)에 어떤 값을 받을 수 있다???
RestaurantRepository로 가서 Future<CursorPagination< RestaurantModel >> paginate( );
이 부분을 봐보자.
Future 하고서 CursorPagination 안에 < RestaurantModel >을 받을 수 있다!
④ 이어서 restaurant_screen.dart 수정하기
< List >에 < RestaurantModel >을 넣어준다.
그런데 이 resp의 경우에는 Cursor 페이지네이션이란 값이 들어가있음!!!
정의로 이동하면...
여기로 넘어오는데, 다시 CursorPagination의 정의로 이동하기 하면...
정의로 잘 넘어온다.
List< T > data; 이 데이터 안에 들어가는 값이 < T > 안에 들어간 값...!
즉, < RestaurantModel >이 < T > 라는 것!!!
RestaurantModel이 List로 data라는
final List< T > data; 이 프로퍼티 안에 들어가 있음.
이 값을 가져오게되면...
RestaurantScreen에서 RestaurantModel을 List로 가져올 수 있음!
그러면 어떻게 반환해주면 될까~???
return resp.data; 이렇게 해 주면 에러가 사라진다.
왜???
👉 resp에서 가져온 값은 CursorPagination이라는 클래스의 인스턴스인데,
거기에서 .data를 가져오면 이 RestaurantRepository에서 정의한 것처럼
List로 된 RestaurantModel을 가져올 수 있기 때문!
⑤ pItem 코드를 제거
RestaurantScreen 코드에서 정의해둔 pItem 코드를 제거해준다.
왜냐면 더 이상 모델링 안해도 되기 때문!
⑥ < List > 수정해주기
그냥 List가 아니라 List하고 < RestaurantModel >을 넣어준다.
아래도 마찬가지!
이렇게 하면 RestaurantRepository를 사용해서
이 paginate라는 함수 그리고 실제 페이지네이션 하는 기능,
getRestaurantDetail 이 두 가지 API를 Retrofit으로 반환을 한 것!!!
RestaurantDetailScreen에서도 RestaurantRepository를 사용했고,
RestaurantScreen에서도 RestaurantRepository를 사용함!
잘 실행되는지 앱을 run해보자!
로그도 잘 찍히고 상세 페이지까지 잘 나오는 걸 볼 수 있다!