감사합니다.!! 중간에 알아야 될 개념이 많네요. imagePicker에서 pickImage로 받은 이미지파일인 pickedImageFile은 XFile 형식이라서, 이것을 다시 일반 파일형식으로 바꾸기 위해 pickedImage = File(pickedImageFile.path)를 했네요. 차라리 변수를 pickedImageXFile로 해서 pickedImage 와 구분하면 좋을 것 같습니다. 그리고 main_screen에서 만든 void pickedImage(File image){} 의 이름을 addImage 로 하고 그래서 AddImage(addImage); 하고 AddImage위젯 클래스에서 const AddImage(this. addImage, ); final Function(File image) addImage; 로 하고 setState에서 widget.addImage(pickedImage!); 식으로 하면, 복잡한 변수가 자연스럽게 정리될 것 같아요.
10:47 여기서 widget.addImageFunc(pickedImage!); ㅇ를 사용 하는 이유를 알 수 있을가요?addImageFunc은 AddImage 클래스에서 인스턴스 변수로 선언했으니 객체를 만들고 불려와야 되는건 아닌가 하는 개념이랑 충돌되어서요 widget클레스에 static 변수로 자동 등록이 되는건가요? 자바개념이랑 좀 헷갈려서 질문드립니다 요즘 열심히 보고있습니다 이런 양질의 강의 공짜로 올려주셔셔 너무감사드립니다
쉐프님~ 잘 따라오다가 이미지를 파이어베이스와 연동하는 과정에서 에러가 이렇게 떴습니다. The following StateError was thrown building: Bad state: field does not exist within the DocumentSnapshotPlatform.. 강의과정중에 Auth, Database,Storage에서 삭제하는 걸 따라 하니까 정상 작동하네요... 어떻게 해결되었는지는 잘 모르겠지만 아마 파이어베이스에서 연동하는 과정에서 에러가 난 것 같네요. 강의 말미에 하신 말씀처럼, 계속 연구하고 공부하겠습니다. ^^
셰프님 강의 감사합니다!! 알려주신 대로 에뮬레이터에서 작동은 잘 되나 메세지를 보낼 때 Invalid argument(s): No host specified in URI file:///null 이런 빨간 글씨가 뜨는데, 혹시 이유를 알 수 있을까요..? 에뮬레이터에는 잘 작동이 되서 큰 문제는 없는데 혹시 서버에서 데이터를 과정에서 발생하는 딜레이 때문에 발생하는 에러메세지인지 궁금해서 여쭤봅니다 ㅠㅠ
강사님 알려 주신 방법으로 채팅 구현을 잘하였습니다. 다만 채팅이 수만 라인일 경우.. 그릅 단톡이라고 했을때 불필요 하게 모든 인원이 방에 들어 갈때 마다 모든 데이터를 받는게 불필요 하다 느껴서 100줄 마다 위로 올라 가면 추가적으로 데이터를 100개씩 받아 오고 싶은데 .get(); 으로 끝나는 부분은 검색을 하니 여기 저기 자료가 많은데 (페이지 네이션) .snapshots(); 으로 끝나는 부분은 페이지네이션 할수 있는 방법을 도져히 검색해도 모르겠는데 조금만 도움 주시면 안될까요
쉐프님 ㅠㅠ final refImage = FirebaseStorage.instance.ref().child('picked_image').child(newUser.user!.uid + 'png'); 에서 newUser.user!.uid의 newUser.user!이 무엇을 의미하나요? 아무리 검색해도 안나와서.. 부탁드립니다.. 영상 항상 잘 보고 있습니다 감사합니다 !
안녕하세요 쉐프님! 우선 항상 좋은 강의 감사드립니다. 질문이 있어 댓글 남깁니다. 저는 에뮬레이터가 아니라 galaxy s9으로 연결하여 디버깅을 진행하고 있습니다. 중간에 파이어베이스의 Firestore Database의 컬렉션을 모두 삭제하고, Authentication의 계정 정보도 모두 삭제하고 코드를 실행시켜보았는데, 이미지를 등록하고 Signup을 누르면, authentication에는 계정이 생성되는데 데이터베이스에 user, chat 등의 데이터가 전혀 등록되지 않습니다...(채팅도 전혀 등록되지 않음) 무엇이 잘못되었을까요? 저는 모든 컬렉션을 삭제해도 자동으로 컬렉션이 생성되는 것이라고 이해했는데, 도저히 이 문제가 해결되지 않네요ㅜㅜ 그리고 이미지를 등록하고, close를 눌렀다가 다시 이미지 등록하는 창을 띄우면 이미지가 다시 보여야 한다고 생각했는데, 다시 들어가면 이미지도 보이지가 않네요. 제가 잘못 이해한 것이 있을까요? 감사합니다.
코딩셰프님 강의 정말 많은 도움 되었습니다! 감사합니다. 궁금한 점이 있는데, StreamBuilder를 사용하면 Firebase에 connection이 추가 되는건가요? 그리고 Chat 화면을 나갈 시 자동으로 disconnect가 되나요? 아니면 따로 핸들해야하나요? 동시접속수가 줄어드는지 궁금합니다. 그리고 제가 Survey에 미처 적지 못한 질문/피드백을 남기자면, 1. 물론 이번 강의가 조금 매운맛 강좌여서 일수도 있겠지만, 지금은 한 class에 view와 logic이 섞인듯한데, 플러터개발 시 좀 더 깔끔한 코드를 쓰는 법을 알고 싶습니다. 예를들어 Android에서 MVVM패턴, Clean Architecture가 있듯이 플러터에도 View, ViewModel, Usecase, Repository 등등 나눠서 개발하는 방법을 알고싶습니다. 2. 그리고 Unit test 및 UI test 쓰는법도 알고싶습니다. 3. 제가 찾아보니 Test와 Production environment 나눠서 Firebase를 사용하고 싶으면 Firebase 프로젝트를 두개를 만들어서 Build variant마다 다른 FB environment를 point하면 되는것 같은데, 맞나요? 다른 방법이 있다면 알고싶고, build variant를 이용하여 다른 프로젝트를 사용하는 강의 올려주시면 너무 좋을 것 같습니다. 긴글 읽어주셔서 감사드리고 항상 감사하게 강의보고 정말 많이 배우고 있습니다 :)
음.., 질문들에 하나씩 답변을 드리자면, 1번은 말하신 것 처럼 조금 매운 맛 강좌 수준으로 강의를 만들었기 때문입니다. 예를 들어, 간단한 프로젝트 정도면 Provider + MVVM 정도의 조합이 좋을 것입니다. 현재 provider강좌와 GetX 강좌를 시작했지만 Bloc 등의 개념을 학습해 나가면서 하나씩 해결을 해나가야 할 것입니다. 2번은 조만간 강좌를 만들어 보겠습니다. 3번은, 일단은 맞습니다. 매운 맛 강좌에서 쇼핑 앱을 만들 때, 이 부분은 한 번 다룰 것입니다.
chat 과 user DB 모두에서 이미지 데이타를 저장하고 있는 것이 조금 낭비인 듯 싶어서 ChatBubbles 에서는 userID값 만 넘겨받은 후에 'user' DB 에서 직접 userImage와 uaserName을 불러 오려고 시도하는데 초보입장에서 조금 복잡하군요..ㅎㅎ 다음에 기회가 된다면 이런 방법에 관해서도 강의를 부탁 드려도 될지 모르겠습니다.
혹시 [ERROR:flutter/lib/ui/ui_dart_state.cc(209)] Unhandled Exception: MissingPluginException(No implementation found for method pickImage on channel plugins.flutter.io/image_picker_android) 이 Error가 생기는 건 가상머신 문제 일까요?? 소스자체는 이상 없는데 Add Image 버튼을 클릭하면 Camera로 안뜨고 저런 에러가 생기네요
소스코드에 문제가 없다면 터미널 창에서 flutter clean flutter pub get flutter run 이 명령어를 순서대로 실행해 보시고, 그래도 해결이 안되면 imagePicker.pickImage( source: ImageSource.camera)에서 camera 말고 gallery 등으로 바꾸어서 앱을 다시 실행해 보기 바랍니다.
정말 고생하십니다. 좋은 강의 잘 들었습니다. 언제부터인지 고질적으로 채팅 첫화면에 빨간화면이 나오는데 고치고싶은데 답이없네요 ㅜㅜ 다른 모든 기능은 정상작동하는데 아래와 같은 배드사이트 경고문 보고 어떻게든 찾아보려했는데 잘 되질 않네요..ㅠ ======== Exception caught by widgets library ======================================================= The following StateError was thrown building: Bad state: field does not exist within the DocumentSnapshotPlatform When the exception was thrown, this was the stack: #0 DocumentSnapshotPlatform.get._findKeyValueInMap (package:cloud_firestore_platform_interface/src/platform_interface/platform_interface_document_snapshot.dart:87:7) #1 DocumentSnapshotPlatform.get._findComponent (package:cloud_firestore_platform_interface/src/platform_interface/platform_interface_document_snapshot.dart:105:23) #2 DocumentSnapshotPlatform.get (package:cloud_firestore_platform_interface/src/platform_interface/platform_interface_document_snapshot.dart:121:12) #3 _JsonDocumentSnapshot.get (package:cloud_firestore/src/document_snapshot.dart:92:48) #4 _JsonDocumentSnapshot.[] (package:cloud_firestore/src/document_snapshot.dart:96:40) #5 Messages.build.. (package:chat/chatting/chat/message.dart:34:32) #6 SliverChildBuilderDelegate.build (package:flutter/src/widgets/sliver.dart:485:22) #7 SliverMultiBoxAdaptorElement._build (package:flutter/src/widgets/sliver.dart:1376:28)
대부분 이 에러는 파이어스토어에서 데이터를 불러오는 과정에서 json과 필드명이 일치하지 않거나 에러 메세지 그대로 필드가 존재하지 않을 때 발생합니다. 우선 파이어스토어의 필드명(대소문자 구분)과 코드상의 json 일치하나 확인 해 보시고(오타 등), 혹시 필드 생성도 잘 되어 있는지 먼저 확인해 보기 바랍니다.
좋은 강의 감사합니다 덕분에 감을 잡아갑니다.
정말 감사합니다 순한맛 강의 몇개 들어보다가 여기까지 완강했네요. 앞으로도 잘 따라가 보겠습니다
이제보니 super thanks 기부도 해주셨네요. 감사히 잘 받겠습니다.
감사합니다.
많이 배웠습니다.
정주행중입니다~ ^^
세세한 강의 내용과 정성에 감사드립니다!!!
보면 볼수록 감탄에 감탄해요 ♡
앱이 꺼져있을 때는 메시지 도착을 푸시 알림 해야되는데, 그부분은 강의가 없네요.
코딩쉐프님 너무 감사드립니다.^^ 즐거운 요리시간 이였습니다~
좋은 강좌 연재해주셔서 감사합니다.
사랑합니다 셰프님! 환절기 건강 조심하세요~
감사합니다.
채팅앱 만만치 않네요... 초보자들이 여기서 많이 걸러질 듯 싶습니다^^;; 저는 강의를 반복해서 다시 듣기로 했습니다.
super, super thanks!
안녕하세요 영상 전부 잘 봤습니다. 혹시 채팅 화면 전에 채팅방 리스트를 만들고 싶은데 참조할만한 자료가 있을까요?
감사합니다.
잘 배웠습니다 쉐프 선생님 고품질 강의를 만들어주셔서 감사합니다!!!!
코딩쉐프님 강의를 작년가을에 처음들었어요 처음에는 진짜 무슨소리인지 하나도 몰라서 10번정도 반복해서 들었던 걸로 기억하는데 어찌어찌 이제는 많이 좋아졌고 혼자서 공식홈페이지도 찾아보는 수준까지 올라왔습니다. 항상 감사하게 생각하고 있습니다.
앞으로 더욱 실력이 향상되실겁니다. ^^ 저도 좀 더 도움이 될 수 있는 강좌를 만들기 위해서 노력하겠습니다.
사정상 실시간으로 시청 못해서 죄송합니다. 셰프님 노고에 항상 감사드립니다. 오늘도 화이팅 하시고요.
무슨 말씀을요. 제 강좌에 관심을 가져 주셔서 감사합니다. 즐거운 하루 보내시기 바랍니다.
요즘 플러터 독학중인데 정말 도움되는 강의입니다. 감사합니다!
결국 끝까지 듣게 되었네요! 셰프님의 강의가 큰 도움이 되고 있습니다.. 다음 Provider 강의도 정말 기대가됩니다. 감사합니다 셰프님!😊
채팅앱 완강하기가 쉽지 않은데 잘하셨습니다. Provider는 기본 개념부터 시작할 예정이니 참고하기 바랍니다. ^^
감사합니다.!!
중간에 알아야 될 개념이 많네요.
imagePicker에서 pickImage로 받은 이미지파일인 pickedImageFile은 XFile 형식이라서,
이것을 다시 일반 파일형식으로 바꾸기 위해 pickedImage = File(pickedImageFile.path)를 했네요.
차라리 변수를 pickedImageXFile로 해서 pickedImage 와 구분하면 좋을 것 같습니다.
그리고
main_screen에서 만든 void pickedImage(File image){} 의 이름을 addImage 로 하고
그래서 AddImage(addImage); 하고
AddImage위젯 클래스에서
const AddImage(this. addImage, );
final Function(File image) addImage; 로 하고
setState에서
widget.addImage(pickedImage!); 식으로 하면,
복잡한 변수가 자연스럽게 정리될 것 같아요.
쉐프님! 길고 힘든 과정을 완료해주셔서 감사드립니다! 정말 많은 도움이 되는 강의였습니다. 수고하셨습니다~
완주하느라 정말 고생많으셨습니다.^^
수강료라고 하기에는 좀 부족하지만 강의마다 좋아요 다 눌렀습니다 !
덕분에 좋은 학습이 되었습니다 감사합니다
10:47
여기서 widget.addImageFunc(pickedImage!); ㅇ를 사용 하는 이유를 알 수 있을가요?addImageFunc은 AddImage 클래스에서 인스턴스 변수로 선언했으니 객체를 만들고 불려와야 되는건 아닌가 하는 개념이랑 충돌되어서요 widget클레스에 static 변수로 자동 등록이 되는건가요? 자바개념이랑 좀 헷갈려서 질문드립니다
요즘 열심히 보고있습니다 이런 양질의 강의 공짜로 올려주셔셔 너무감사드립니다
쉐프님~
잘 따라오다가 이미지를 파이어베이스와 연동하는 과정에서 에러가 이렇게 떴습니다.
The following StateError was thrown building:
Bad state: field does not exist within the DocumentSnapshotPlatform..
강의과정중에 Auth, Database,Storage에서 삭제하는 걸 따라 하니까 정상 작동하네요...
어떻게 해결되었는지는 잘 모르겠지만 아마 파이어베이스에서 연동하는 과정에서 에러가 난 것 같네요.
강의 말미에 하신 말씀처럼, 계속 연구하고 공부하겠습니다. ^^
셰프님 강의 감사합니다!! 알려주신 대로 에뮬레이터에서 작동은 잘 되나 메세지를 보낼 때
Invalid argument(s): No host specified in URI file:///null 이런 빨간 글씨가 뜨는데, 혹시 이유를 알 수 있을까요..?
에뮬레이터에는 잘 작동이 되서 큰 문제는 없는데 혹시 서버에서 데이터를 과정에서 발생하는 딜레이 때문에 발생하는 에러메세지인지 궁금해서 여쭤봅니다 ㅠㅠ
강사님 알려 주신 방법으로 채팅 구현을 잘하였습니다. 다만 채팅이 수만 라인일 경우.. 그릅 단톡이라고 했을때 불필요 하게 모든 인원이 방에 들어 갈때 마다 모든 데이터를 받는게 불필요 하다 느껴서 100줄 마다 위로 올라 가면 추가적으로 데이터를 100개씩 받아 오고 싶은데
.get(); 으로 끝나는 부분은 검색을 하니 여기 저기 자료가 많은데 (페이지 네이션)
.snapshots(); 으로 끝나는 부분은 페이지네이션 할수 있는 방법을 도져히 검색해도 모르겠는데 조금만 도움 주시면 안될까요
쉐프님 ㅠㅠ
final refImage = FirebaseStorage.instance.ref().child('picked_image').child(newUser.user!.uid + 'png');
에서 newUser.user!.uid의 newUser.user!이 무엇을 의미하나요?
아무리 검색해도 안나와서.. 부탁드립니다..
영상 항상 잘 보고 있습니다 감사합니다 !
사용자가 선택한 이미지를 업로드하는 과정에서 이 유저의 정보는 UserCredential 클래스가 가지고 있게 됩니다. 그래서 user의 정보를 가져오고 이 user의 uid를 사용해서 이미지를 구분하게 됩니다.
바로앞 질문(.user DB 에서 userName과 picked_image 가져오기 )의 결과를 계속 시도해보고 있는데..
관련하여 질문입니다. 아래 같이 시도하면
A위치에서는 분명히 doc에서 userName을 가지고 있는데
B위치에서는doc가 null 값이 되버립니다.
누구든 방법을 좀 알려 주세요
===========================================================
message.dart 파일입니다.
......중략
final chatDocs = snapshot.data!.docs;
return ListView.builder(
reverse: true,
itemCount: chatDocs.length,
itemBuilder: (context, index) {
var userID = chatDocs[index]['userID'].toString();
var db = FirebaseFirestore.instance;
db.collection("user").doc(userID).get().then((userDocs) {
doc = userDocs['userName'].toString();
// print(doc); ------------------------(A)
});
// if( doc!= null){ print(doc); }; -------------(B)
return ChatBubbles(
chatDocs[index]['text'],
chatDocs[index]['userID'].toString() == _user!.uid,
chatDocs[index]['userName'], // ===> userDocs['userName'] 이렇게 하고싶은데....
chatDocs[index]['userImage']);//===> userDocs['picked_image'] 여기도요...
},
);
...중략
============================================================
안녕하세요 쉐프님! 우선 항상 좋은 강의 감사드립니다. 질문이 있어 댓글 남깁니다.
저는 에뮬레이터가 아니라 galaxy s9으로 연결하여 디버깅을 진행하고 있습니다.
중간에 파이어베이스의 Firestore Database의 컬렉션을 모두 삭제하고, Authentication의 계정 정보도 모두 삭제하고 코드를 실행시켜보았는데, 이미지를 등록하고 Signup을 누르면, authentication에는 계정이 생성되는데 데이터베이스에 user, chat 등의 데이터가 전혀 등록되지 않습니다...(채팅도 전혀 등록되지 않음) 무엇이 잘못되었을까요? 저는 모든 컬렉션을 삭제해도 자동으로 컬렉션이 생성되는 것이라고 이해했는데, 도저히 이 문제가 해결되지 않네요ㅜㅜ
그리고 이미지를 등록하고, close를 눌렀다가 다시 이미지 등록하는 창을 띄우면 이미지가 다시 보여야 한다고 생각했는데, 다시 들어가면 이미지도 보이지가 않네요. 제가 잘못 이해한 것이 있을까요?
감사합니다.
여러가지 이유가 있을 수 있어서 뭐라 답변을 드리기가 애매합니다.
그리고 당연히 컬렉션을 삭제해도 문제없습니다. 우선 message.dart파일과 new_message.dart 파일의 코드를 다시 한 번 살펴보시기 바랍니다.
저도 같은 현상이 발생했는데 url 받아오는 부분에 await 를 빠뜨렸었네요. final url = await refImage.getDownloadURL();
@@NULL-cf5jn await가 있는데도 그러네요... 혹시 사진 추가하고 close했다가 다시 들어가면 이미지 그대로 잘 들어가 있으신가요? 저는 이미지 자체를 잘 못 불러오는 것 같아서요...
코딩셰프님 강의 정말 많은 도움 되었습니다! 감사합니다.
궁금한 점이 있는데, StreamBuilder를 사용하면 Firebase에 connection이 추가 되는건가요? 그리고 Chat 화면을 나갈 시 자동으로 disconnect가 되나요? 아니면 따로 핸들해야하나요? 동시접속수가 줄어드는지 궁금합니다.
그리고 제가 Survey에 미처 적지 못한 질문/피드백을 남기자면,
1. 물론 이번 강의가 조금 매운맛 강좌여서 일수도 있겠지만, 지금은 한 class에 view와 logic이 섞인듯한데, 플러터개발 시 좀 더 깔끔한 코드를 쓰는 법을 알고 싶습니다. 예를들어 Android에서 MVVM패턴, Clean Architecture가 있듯이 플러터에도 View, ViewModel, Usecase, Repository 등등 나눠서 개발하는 방법을 알고싶습니다.
2. 그리고 Unit test 및 UI test 쓰는법도 알고싶습니다.
3. 제가 찾아보니 Test와 Production environment 나눠서 Firebase를 사용하고 싶으면 Firebase 프로젝트를 두개를 만들어서 Build variant마다 다른 FB environment를 point하면 되는것 같은데, 맞나요? 다른 방법이 있다면 알고싶고, build variant를 이용하여 다른 프로젝트를 사용하는 강의 올려주시면 너무 좋을 것 같습니다.
긴글 읽어주셔서 감사드리고 항상 감사하게 강의보고 정말 많이 배우고 있습니다 :)
음.., 질문들에 하나씩 답변을 드리자면,
1번은 말하신 것 처럼 조금 매운 맛 강좌 수준으로 강의를 만들었기 때문입니다. 예를 들어, 간단한 프로젝트 정도면 Provider + MVVM 정도의 조합이 좋을 것입니다. 현재 provider강좌와 GetX 강좌를 시작했지만 Bloc 등의 개념을 학습해 나가면서 하나씩 해결을 해나가야 할 것입니다.
2번은 조만간 강좌를 만들어 보겠습니다.
3번은, 일단은 맞습니다. 매운 맛 강좌에서 쇼핑 앱을 만들 때, 이 부분은 한 번 다룰 것입니다.
@@codingchef 와우~ 바쁘실텐데 이렇게 빨리 답변 주셔서 놀랐어요!!! 다른 개발자분들과 소통해주시니 너무 좋은거같아요. 강의 기다리겠습니다! 항상 감사합니다~
chat 과 user DB 모두에서 이미지 데이타를 저장하고 있는 것이 조금 낭비인 듯 싶어서 ChatBubbles 에서는 userID값 만 넘겨받은 후에 'user' DB 에서 직접 userImage와 uaserName을 불러 오려고 시도하는데 초보입장에서 조금 복잡하군요..ㅎㅎ
다음에 기회가 된다면 이런 방법에 관해서도 강의를 부탁 드려도 될지 모르겠습니다.
혹시 [ERROR:flutter/lib/ui/ui_dart_state.cc(209)] Unhandled Exception: MissingPluginException(No implementation found for method pickImage on channel plugins.flutter.io/image_picker_android) 이 Error가 생기는 건 가상머신 문제 일까요?? 소스자체는 이상 없는데 Add Image 버튼을 클릭하면 Camera로 안뜨고 저런 에러가 생기네요
소스코드에 문제가 없다면 터미널 창에서
flutter clean
flutter pub get
flutter run
이 명령어를 순서대로 실행해 보시고,
그래도 해결이 안되면 imagePicker.pickImage(
source: ImageSource.camera)에서 camera 말고 gallery 등으로 바꾸어서 앱을 다시 실행해 보기 바랍니다.
정말 고생하십니다. 좋은 강의 잘 들었습니다. 언제부터인지 고질적으로 채팅 첫화면에 빨간화면이 나오는데 고치고싶은데 답이없네요 ㅜㅜ 다른 모든 기능은 정상작동하는데 아래와 같은 배드사이트 경고문 보고 어떻게든 찾아보려했는데 잘 되질 않네요..ㅠ
======== Exception caught by widgets library =======================================================
The following StateError was thrown building:
Bad state: field does not exist within the DocumentSnapshotPlatform
When the exception was thrown, this was the stack:
#0 DocumentSnapshotPlatform.get._findKeyValueInMap (package:cloud_firestore_platform_interface/src/platform_interface/platform_interface_document_snapshot.dart:87:7)
#1 DocumentSnapshotPlatform.get._findComponent (package:cloud_firestore_platform_interface/src/platform_interface/platform_interface_document_snapshot.dart:105:23)
#2 DocumentSnapshotPlatform.get (package:cloud_firestore_platform_interface/src/platform_interface/platform_interface_document_snapshot.dart:121:12)
#3 _JsonDocumentSnapshot.get (package:cloud_firestore/src/document_snapshot.dart:92:48)
#4 _JsonDocumentSnapshot.[] (package:cloud_firestore/src/document_snapshot.dart:96:40)
#5 Messages.build.. (package:chat/chatting/chat/message.dart:34:32)
#6 SliverChildBuilderDelegate.build (package:flutter/src/widgets/sliver.dart:485:22)
#7 SliverMultiBoxAdaptorElement._build (package:flutter/src/widgets/sliver.dart:1376:28)
대부분 이 에러는 파이어스토어에서 데이터를 불러오는 과정에서 json과 필드명이 일치하지 않거나 에러 메세지 그대로 필드가 존재하지 않을 때 발생합니다. 우선 파이어스토어의 필드명(대소문자 구분)과 코드상의 json 일치하나 확인 해 보시고(오타 등), 혹시 필드 생성도 잘 되어 있는지 먼저 확인해 보기 바랍니다.
@@codingchef 헛 정말 필드삭제하니까 되네요 ㅜㅜ 갑사합니다