강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

SH Kim님의 프로필 이미지
SH Kim

작성한 질문수

Flutter 중급 1편 - 클린 아키텍처

페이지네이션 기능 추가에 관련하여 질문을 드립니다.

작성

·

527

0

안녕하세요. 선생님의 강의에서 많은 것을 배울 수 있어서 너무나 좋은 시간이었습니다.

강의를 한 번 듣고, 제 코드에 적용을 시키던 중 해결이 잘 되지 않는 부분에 대하여 궁금함이 생겨서 질문을 드립니다.

초보라 질문이 깔끔하지 못한 점을 미리 양해를 부탁 드립니다.

 

제가 기존 프로젝트에서 참고하던 페이지네이션 기능은 다음과 같습니다.

https://github.com/rutvik110/Flutter-Infinite-Pagination/blob/master/lib/src/pagination_notifier.dart

: 강의에서의 viewModel 역할

https://github.com/rutvik110/Flutter-Infinite-Pagination/blob/master/lib/src/pagination_state/pagination_state.dart

: 강의에서의 state 역할

 

provider -> riverpod 으로 대체된 점,

changeNotifier -> stateNotifier 로 대체된 점을 제외하면 기능적으로 유사해 보입니다.

 

강의를 수강한 후 제 코드를 리팩토링하면서 가장 난관에 부딪쳤던 부분은 다음과 같습니다.

 

1) 강의의 state는 dataclass로 작성되어 있다.

state 파일이 모델의 List 정보를 담고 있습니다.

.when 또는 .maybeWhen 분기를 사용할 수 없었습니다.

isLoading 뿐만 아니라 페이지네이션의 loading, error 등 분기 처리할 상태 데이터가 점점 늘어남에 따라 복잡해져서

photoState 안에 LoadingState 라는 sealed class를 생성하여 넣었습니다.

changeNotifier가 리스트를 소유하는 것과, state가 리스트를 소유하는 것 중 어느 것이 바람직한지

제 코드를 보면서 의아해져서 질문을 드립니다.

 

2) 다른 screen을 작성할 때의 중복 코드 문제

식물의 과, 속, 종에 따른 GridView를 작성하는 스크린에도, 위의 페이지네이션 기능이 필요합니다.

위의 페이지네이션 예제와 같이 제네릭을 이용해 타입을 전달하면 같은 코드를 중복하여 작성하지 않아도 될 것 같은데, 뷰 모델을 계속 고쳐가면서 방법을 찾아보고 있지만 마땅한 수가 떠오르지 않습니다.

 

선생님의 클린 아키텍처 강의의 예제는 디렉토리 구조가 직관적이고,

위 예제 코드는 그려야 할 페이지의 수와, 상황이 늘어남에도 분기 처리가 직관적이었습니다.

둘의 장점만을 모아서 코드를 작성하고 싶습니다만, 제 실력이 부족하여 코드 작성에 어려움이 있었습니다.

 

제 코드에서 필요 부분을 발췌한 리포지토리입니다.

https://github.com/feud72/flutter-pagination-code-snippet/

 

바쁘신 것을 알지만 답을 얻을 곳이 없어서 염치 불구하고 질문 글을 올립니다. 감사합니다!

답변 1

1

오준석님의 프로필 이미지
오준석
지식공유자

안녕하세요.

오늘도 풀타임 수업을 하고 와서 힘들어서 공유주신 코드들은 간단하게 훑어보기만 하고 답변드립니다.

1) state 가 리스트를 소유하는 것이 맞지 않을까요

제 의견은 페이지네이션 구현에 rivorpod의 코드가 섞여있으면 범용적으로 재사용성이 떨어진다고 생각합니다.

제가 짜 놓은 라이브러리 의존성 없는 페이지네이션 예제 코드 공유드립니다.
final 브랜치 보시면 됩니다. 참고하시고요.

https://github.com/junsuk5/flutter-paging-guide/tree/final

간단하게 라이브러리를 사용하신다면 infinite_scroll_pagination 추천합니다.

https://pub.dev/packages/infinite_scroll_pagination

SH Kim님의 프로필 이미지
SH Kim

작성한 질문수

질문하기