[Flutter] Pagination UI에 적용해보기

겨레·2024년 7월 19일
0

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해보자!

로그도 잘 찍히고 상세 페이지까지 잘 나오는 걸 볼 수 있다!

profile
호떡 신문지에서 개발자로 환생

0개의 댓글