강의

멘토링

로드맵

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

강민성님의 프로필 이미지
강민성

작성한 질문수

Flutter로 메신저앱 만들기

메시지 전송 기능

상태에서 가져오는 방식 vs. Provider에서 가져오는 방식

해결된 질문

작성

·

329

·

수정됨

0

38강 21:58 부분의 currentUserModel 부분에 authProvider에서 가져오는게 아닌 state에 저장된 유저모델
state.model.userList[0]를 넣는건 안되나요? 2개의 차이점을 알고 싶습니다

퀴즈

67%나 틀려요. 한번 도전해보세요!

채팅 기능에서 BaseModel 추상 클래스의 주된 목적은 무엇일까요?

메시지 전송 로직을 추상화합니다.

일대일 채팅과 그룹 채팅의 중복 데이터(ID, 사용자 목록 등)를 관리합니다.

Firestore 데이터 저장 형식을 정의합니다.

사용자 인증 상태를 관리합니다.

답변 2

0

강민성님의 프로필 이미지
강민성
질문자

enterChatFromFriendList 호출될때마다 state의 userList의 순서가 바뀌네요! 감사합니다!!

0

DEV MOO님의 프로필 이미지
DEV MOO
지식공유자

currentUserModel 에는 현재 접속중인 유저(나 자신)의 정보를 갖고 있는 UserModel 을 전달해야 합니다.
state.model.userList 는 채팅방에 참여중인 유저들의 UserModel 객체가 저장되어 있는 리스트 이죠.
이 리스트의 0번 index 의 데이터가 항상 현재 접속중인 유저의 정보를 갖는 UserModel 객체라고 보장할 수는 없기 때문입니다. 채팅에 참여 중인 상대방의 UserModel 일 수도 있기 때문에 authProvider 에서 가져오는 것 입니다.

강민성님의 프로필 이미지
강민성
질문자

그럼 chatScreen의
final userModel = chatModel.userList[1]; 이 코드도 부분도 문제가 있는거 아닌가요?
그렇다고 authProvider로 모델을 가져오면 나의 모델을 가져오는거라.. 헤깔리네요

DEV MOO님의 프로필 이미지
DEV MOO
지식공유자

잘못 답변 드렸습니다. 죄송합니다.
state.model.userList[0] 로 작성하셔도 문제 없습니다.

  1. 친구 목록 화면에서 채팅 상대를 터치했을 때,
    chat_repository.dart 의 enterChatFromFriendList 함수가 호출되면서
    0번 인덱스에 접속 중인 유저의 UserModel, 1번 인덱스에 채팅 상대의 UserModel 객체를 갖는 리스트가 생성되고(아래 코드)

final userModelList = [
  await firestore
      .collection('users')
      .doc(currentUserId)
      .get()
      .then((value) => UserModel.fromMap(value.data()!)),
  await firestore
      .collection('users')
      .doc(userId)
      .get()
      .then((value) => UserModel.fromMap(value.data()!)),
];

이 리스트를 속성으로 갖는 ChatModel 객체를 생성해서 반환합니다.

2. chat_provider.dart 의 enterChatFromFriendList 함수에서 이 ChatModel 객체를 상태관리 데이터로 등록합니다.

결국, ref.watch(authProvider).userModel 과 state.model.userList[0] 모두 동일한 UserModel 객체이므로 어느 쪽을 사용해셔도 문제 없습니다.

강민성님의 프로필 이미지
강민성

작성한 질문수

질문하기