강의

멘토링

로드맵

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

박수훈님의 프로필 이미지
박수훈

작성한 질문수

Flutter로 메신저앱 만들기

그룹 채팅방 목록 화면

채팅목록 스크린에서 ref.listen ()말고 ref.watch().when()을 쓰는 이유는?

작성

·

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 호출이 발생하는 것이 과다한 데이터 요청을 유발할 수 있다는 우려는 타당합니다. 이러한 상황에서 실시간 업데이트가 필요하지 않다면, 강의에서 언급된 것처럼 필요할 때만 데이터를 가져오는 방식으로 최적화를 고려할 수 있습니다.

최적화 제안:

  1. Pagination(페이지네이션): 처음 몇 개의 데이터만 로드하고 사용자가 스크롤할 때 추가 데이터를 가져오는 방법은 매우 합리적입니다. 이를 통해 초기 데이터 로드 시 소비 리소스를 최소화할 수 있습니다.

  2. Lazy Loading(지연 로딩): 사용자가 스크롤을 하는 시점에 새 데이터를 가져와서 보여주는 방식입니다. 이 역시 초기 데이터 로드의 부담을 줄일 수 있습니다.

  3. Caching: 데이터의 변경이 빈번하지 않다면, 캐싱을 통해 일부 데이터 재로드를 피할 수 있습니다.

관련 유사 질문 및 링크:

다음 링크들에서는 상태 관리 및 데이터 로딩과 관련된 다양한 접근법을 설명하고 있으니 참고하시기 바랍니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

박수훈님의 프로필 이미지
박수훈

작성한 질문수

질문하기