작성
·
53
0
채팅목록화면을 만들때
final chatListProvider = StreamProvider.autoDispose<List<ChatModel>>((ref) {
final currentUserModel = ref.watch(authProvider).userModel;
return ref.watch(chatRepositoryProvider).getChatList(
currentUserModel: currentUserModel,
);
});
ref.watch(chatListProvider).when()을 사용하여 채팅목록화면을 만듭니다. when 문을 쓰게 되면 데이터 변화가 있을때마다 getChatList 함수가 실행됩니다. 매번 데이터에 변화가 있을때마다 getChatList함수가 실행이되면 너무 많은 데이터를 불러올 것으로 생각이 되어집니다. 여기서 궁금한 건, 채팅화면에서는 페이지네이션을 적용해서 초기화면을 조회할때는 limit를 설정해서 몇개의 데이터만 불러오고 화면을 올렸을때 lastid를 기준으로 데이터를 추가적으로 불러오는 형태로 화면을 구상하였는데, 채팅목록도 마찬가지고 처음에는 몇개의 데이터만 가져오고 사용자가 화면을 스크롤했을때 추가적으로 데이터를 불러오게 하면 안 되는건가요...?
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
채팅 목록에서 ref.watch(chatListProvider).when()
를 사용하는 것은 데이터 스트림이 제공될 때마다 UI 업데이트를 쉽게 할 수 있게 해줍니다. 데이터가 변경될 때마다 API 호출이 발생하는 것이 과다한 데이터 요청을 유발할 수 있다는 우려는 타당합니다. 이러한 상황에서 실시간 업데이트가 필요하지 않다면, 강의에서 언급된 것처럼 필요할 때만 데이터를 가져오는 방식으로 최적화를 고려할 수 있습니다.
Pagination(페이지네이션): 처음 몇 개의 데이터만 로드하고 사용자가 스크롤할 때 추가 데이터를 가져오는 방법은 매우 합리적입니다. 이를 통해 초기 데이터 로드 시 소비 리소스를 최소화할 수 있습니다.
Lazy Loading(지연 로딩): 사용자가 스크롤을 하는 시점에 새 데이터를 가져와서 보여주는 방식입니다. 이 역시 초기 데이터 로드의 부담을 줄일 수 있습니다.
Caching: 데이터의 변경이 빈번하지 않다면, 캐싱을 통해 일부 데이터 재로드를 피할 수 있습니다.
다음 링크들에서는 상태 관리 및 데이터 로딩과 관련된 다양한 접근법을 설명하고 있으니 참고하시기 바랍니다.
Provider 사용법 질문: Provider를 사용하는 방법에 대한 설명으로, 상태 관리 라이브러리 사용 시 어느 시점에 데이터를 갱신할지를 결정하는 방법에 대해 설명합니다.
상태에서 가져오는 방식 vs. Provider에서 가져오는 방식: 상태 관리와 Provider 사용 시의 차이점을 논의하고 있어 도움이 될 것입니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.