강의

멘토링

커뮤니티

Cộng đồng Hỏi & Đáp của Inflearn

Hình ảnh hồ sơ của min2019112544
min2019112544

câu hỏi đã được viết

Tạo ứng dụng nhắn tin với Flutter

Chức năng gửi tin

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

Đã giải quyết

Viết

·

302

·

Đã chỉnh sửa

0

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

flutterandroidfirebasedartriverpod

Câu trả lời 2

0

min2019112544님의 프로필 이미지
min2019112544
Người đặt câu hỏi

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

0

DEV MOO님의 프로필 이미지
DEV MOO
Người chia sẻ kiến thức

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

min2019112544님의 프로필 이미지
min2019112544
Người đặt câu hỏi

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

DEV MOO님의 프로필 이미지
DEV MOO
Người chia sẻ kiến thức

잘못 답변 드렸습니다. 죄송합니다.
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 객체이므로 어느 쪽을 사용해셔도 문제 없습니다.

Hình ảnh hồ sơ của min2019112544
min2019112544

câu hỏi đã được viết

Đặt câu hỏi