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

작성자 없음

작성자 정보가 삭제된 글입니다.

Flutter로 SNS 앱 만들기

게시글 정보 가져오기

8:18 저는 왜이리 이해가 안될까요. 보고 또보고 해도 포기해야 되겠죠...

작성

·

43

0

Future<List<FeedModel>> getFeedList() async {
  QuerySnapshot<Map<String, dynamic>> snapshot = await firebaseFirestore
      .collection('feeds')
      .orderBy('createAt', descending: true)
      .get();
  return await Future.wait(snapshot.docs.map((e) async {
    Map<String, dynamic> data = e.data();
    DocumentReference<Map<String, dynamic>> writerDocRef = data['writer'];
    DocumentSnapshot<Map<String, dynamic>> writerSnapshot =
    await writerDocRef.get();
    UserModel userModel = UserModel.fromMap(writerSnapshot.data()!);
    data['writer'] = userModel;
    return FeedModel.fromMap(data);
  }).toList());


}

이부분에서

return await Future.wait(snapshot.docs.map((e) async {
  Map<String, dynamic> data = e.data();
  DocumentReference<Map<String, dynamic>> writerDocRef = data['writer'];
  DocumentSnapshot<Map<String, dynamic>> writerSnapshot =
  await writerDocRef.get();
  UserModel userModel = UserModel.fromMap(writerSnapshot.data()!);
  data['writer'] = userModel;
  return FeedModel.fromMap(data);

이부분을 왜 이리 이해하기가 어려운지 모르겠어요..

저만 그런가요...돌려봐도 싶지 않네요.


.

 

답변 1

0

안녕하세요, 인프런 AI 인턴입니다.

vadain2000님께서 질문해주신 코드는 Firebase Firestore에서 피드 데이터를 가져오는 함수로, 각 피드에 포함된 ‘writer’ 필드의 참조를 바탕으로 사용자 정보를 가져와 UserModel로 변환하는 과정을 담고 있습니다.

이해를 도와드리기 위해 코드를 간단히 설명드리겠습니다:

  1. Firestore에서 데이터 가져오기: getFeedList() 함수는 Firestore의 ‘feeds’ 컬렉션에서 생성 날짜 기준으로 최근 데이터부터 순서대로 QuerySnapshot으로 가져오고 있습니다.

  2. 비동기 데이터 처리: snapshot.docs.map((e) async { ... }) 구문은 각 피드 문서에 대해 비동기적으로 데이터를 처리하기 위해 사용되었습니다. 여기서 Future.wait를 사용하여 모든 피드 문서에 대한 비동기 작업이 모두 완료될 때까지 기다리도록 하고 있습니다.

  3. 사용자 정보 참조: 각 피드 문서의 ‘writer’ 필드는 실제 사용자 정보를 저장하는 문서의 참조입니다. 이를 통해 writerDocRef.get()을 사용하여 해당 사용자의 DocumentSnapshot을 가져옵니다.

  4. UserModel 변환 및 데이터 갱신: 가져온 사용자 정보를 UserModel.fromMap을 사용하여 UserModel 객체로 변환하고 피드 데이터의 ‘writer’를 이를 바탕으로 갱신합니다. 마지막으로, 이 갱신된 데이터를 사용하여 FeedModel을 생성하고 반환합니다.

이 과정이 복잡하게 느껴질 수 있습니다. 왜냐하면 비동기 프로그래밍 및 Firestore 데이터 참조가 함께 사용되기 때문입니다. 익숙해지기까지 시간이 조금 걸릴 수 있지만, Firebase 문서와 관련 자료를 참고하여 개념을 하나씩 익히시면 이해에 큰 도움이 될 것입니다.

또한, 비슷한 주제를 다루는 질문으로는 이 링크에서 ‘제 질문이 해결되지 않았어요! 피드 문제에 대해 문서 참조와 비동기 처리에 대해 더 설명해주세요.‘라는 질문이 있었으니, 참고하시면 도움이 될 것입니다.

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

작성자 없음

작성자 정보가 삭제된 글입니다.

질문하기