인프런 커뮤니티 질문&답변
상태에서 가져오는 방식 vs. Provider에서 가져오는 방식
해결된 질문
작성
·
329
·
수정됨
퀴즈
채팅 기능에서 BaseModel 추상 클래스의 주된 목적은 무엇일까요?
메시지 전송 로직을 추상화합니다.
일대일 채팅과 그룹 채팅의 중복 데이터(ID, 사용자 목록 등)를 관리합니다.
Firestore 데이터 저장 형식을 정의합니다.
사용자 인증 상태를 관리합니다.
답변 2
0
0
currentUserModel 에는 현재 접속중인 유저(나 자신)의 정보를 갖고 있는 UserModel 을 전달해야 합니다.
state.model.userList 는 채팅방에 참여중인 유저들의 UserModel 객체가 저장되어 있는 리스트 이죠.
이 리스트의 0번 index 의 데이터가 항상 현재 접속중인 유저의 정보를 갖는 UserModel 객체라고 보장할 수는 없기 때문입니다. 채팅에 참여 중인 상대방의 UserModel 일 수도 있기 때문에 authProvider 에서 가져오는 것 입니다.
잘못 답변 드렸습니다. 죄송합니다.
state.model.userList[0] 로 작성하셔도 문제 없습니다.
친구 목록 화면에서 채팅 상대를 터치했을 때,
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 객체이므로 어느 쪽을 사용해셔도 문제 없습니다.






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