안녕하세요 항상 좋은 강의 감사합니다. 다름이 아니라 이번 강의에서 userName를 추가하면서 Bad state: field does not exist within the DocumentSnapshotPlatform 란 오류가 계속 나오고 있어서요 아무리 찾아봐도 해당 오류 해결이 안되네요...... 혹시 어떤 부분에 문제가 있어서 그럴지 확인이 가능하실까요?
음.., 제가 공유해 드린 프로젝트 파일 등과 비교해 보시고 코드에 문제가 없다면, message.dart파일에 코드를 아래처럼 바꾸어 보기 바랍니다. chatDocs[index].data()['text'], chatDocs[index].data()['username'],
@@codingchef 답변 감사합니다. 위와 같이 변경 후 username에 type 'Null' is not a subtype of type 'String' 추가 에러가 확인되어 아래와 같이 변경하니 해결되었습니다. chatDocs[index].data()['userName'].toString(), 감사합니다~~
셰프님 ! 유저네임을 입력하고 받아올때, 따로 데이터베이스에 저장하지 않고 , displayName에 저장을 했습니다. 그래서 signup할때 동시에 텍스트필드에서 입력된 userName을 displayName에 넣고 chatbubble에서 유저네임을 출력되게 했는데, signup하고 채팅을 보냈을때 username이 null값이 나오네요.. sginout했다가 다시 login 하면 잘 출력되는게 무엇이 문제일까요 ?
8분 40초 즘에 말풍선에 userName을 좌측 우측 붙이는 코드에서요(Column의 crossAxisAlignment) isMe 삼항연산자는 필요없어 보입니다. 이유는 이미 저 코드 블럭은 상위에 isMe로 체크해서 만든 ChatBubble이니... 제가 생각한게 맞을까요?
매우 잘 보고 있습니다. 언제부턴가 핫리로드를 시키면 One or more plugins require a higher Android SDK version. Fix this issue by adding the following to C:\Users\kimjiho\Desktop\TEST\tetopia\android\app\build.gradle: android { compileSdkVersion 32 ... 이러한 경고문이 발생하는데 이건 어떻게 해결 해야 하나요?
코딩셰프님 userName 부분을 추가한 후에 채팅을 치면 [ERROR:flutter/lib/ui/ui_dart_state.cc(198)] Unhandled Exception: Null check operator used on a null value 이러한 에러가 나면서 firebase에도 값이 저장이 안됩니다.... 어떻게 해결해야 할까요...?
안녕하세요! 쉐프님! 요번 강의도 잘 보았습니다. 제대로 학습하겠습니다. 한가지 강의 건의사항이 있습니다. firebase 연동을 하다가 최근에는 새롭게 연동하는 방법이 나왔다고 알게되었는데요, dart pub global activate flutterfire_cli 를 명령창에 입력 하면 자동으로 연동이 진행된다해서 시도해봤으나 엄청난 에러에 헤매고 있네요 ㅡㅡㅋ , 혹시 관련해서 최근에 도입된 firebase 연동에 관한 보충강의가 가능하실지 여쭤봅니다. 항상 감사합니다 쉐프님~
안녕하세요 셰프님, 좋은 강의 항상 감사드립니다. 처음으로 질문드리네요 ^^; 저만 그런건지 모르겠는데요.. main_screen에서 SIgnup 때 createUserWithEmailAndPassword 직후에 user 컬렉션에 유저 uid 값으로 문서를 추가하고 값을 넣어 주는 부분이 있는데요. 여기서 아래와 같은 에러가 발생해서요.. I/flutter ( 6801): [cloud_firestore/permission-denied] The caller does not have permission to execute the specified operation. Firestore 규칙에 아래 부분 때문에 거부되는 것 같아 match /user/{uid}{ allow read, write: if request.auth != null && request.uid == uid; } 아래와 같이 request 의 uid 와 비교하는 부분을 삭제하니 제대로 추가가 됩니다. match /user/{uid}{ allow read, write: if request.auth != null; } 문서가 없는 상태에서 비교가 되지 않아 거부되는 것으로 보이는데, 강의 중간에 규칙 변경이 있었을까요? 아님 제가 놓친 부분이 있어 그런 것인지 알 수가 없네요. 가능하시다면 답변 부탁드립니다. 감사합니다!
파이어베이스 규칙을 보니 match /user/{uid}{ allow read, write: if request.auth != null && request.uid == uid; 에서 request뒤에 auth가 빠져 있습니다. match /user/{uid}{ allow read, write: if request.auth != null && request.auth.uid == uid; 이렇게 추가해 주기 바랍니다.
강의 정말 감사합니다. 궁금한것이 있습니다. StreamBuilder( stream:FirebaseFirestore.instance .collection('chat') .orderBy('time', descending: true) .snapshots()에서 테스트기준 현재 Firestore에 100개넘는 채팅을 입력했습니다. 스트림으로 받아올때마다 모든 채팅 100개의 정보를 얻어오는데 걱정인 부분이 만약에 채팅이 10000개의 기록이 있으면 이걸 매번 전부 얻어오는건가요? select top 100 같은 기능을 줄수있는 방법은 없나요?
혹시 안드로이드 앱을 만들어본 경험이 있다면 RecyclerView라는 것을 들어보셨을 거 같습니다. 리스트 뷰에서 매번 새로운 내용이 추가 될 때마다 이전의 모든 내용들까지도 다시 불러와서 앱의 성능이 떨어지는 것을 개선하기 위한 것입니다. 이 역할을 하는 것이 flutter에서는 ListView.builder라고 이해하시면 될 거 같습니다. 즉, 화면이 보여지는 만큼만 데이터를 불러오기 때문에 앱이 느려지거나 하는 성능 저하를 막을 수 있습니다. 그러니 굳이 현시점에서라면 select top 100 같은 기능을 고민하지 않아도 될 거 같습니다.
lib/chatting/chat/new_message.dart:24:18: Warning: Operand of null-aware operation '!' has type 'User' which excludes null. - 'User' is from 'package:firebase_auth/firebase_auth.dart' ('/D:/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_auth-3.4.1/lib/firebase_auth.dart'). 'userID' : user!.uid, ^ Reloaded 1 of 906 libraries in 1,592ms. 이렇게 나와서 'userID' : user.uid로 바꿔줬더니 돌아갑니다.
조금씩 조금씩 알아가는 재미도 있고...간혹 에러로 난감할 때 해결 관련 댓글과 구글을 통해서 해결하면서 ...
코딩셰프님의 강의 너무 감사합니다...클론 코딩을 통해서 앞으로 나가고 있습니다.
강의 감사합니다. 잘 듣고 있습니다. ^^ 작은 문제는 댓글을 통해 해결하였습니다. ^^
미쳤습니다. 여기 까지 쭉 단숨에 들었네요. 강의 멋집니다. 다음편도 기대 합니다~
감사합니다.
안녕하세요 항상 좋은 강의 감사합니다.
다름이 아니라 이번 강의에서 userName를 추가하면서
Bad state: field does not exist within the DocumentSnapshotPlatform
란 오류가 계속 나오고 있어서요 아무리 찾아봐도 해당 오류 해결이 안되네요......
혹시 어떤 부분에 문제가 있어서 그럴지 확인이 가능하실까요?
음.., 제가 공유해 드린 프로젝트 파일 등과 비교해 보시고 코드에 문제가 없다면,
message.dart파일에 코드를 아래처럼 바꾸어 보기 바랍니다.
chatDocs[index].data()['text'],
chatDocs[index].data()['username'],
chatDocs[index].data()['userId'].toString() == user!.uid,
@@codingchef 답변 감사합니다. 위와 같이 변경 후
username에 type 'Null' is not a subtype of type 'String'
추가 에러가 확인되어 아래와 같이 변경하니 해결되었습니다.
chatDocs[index].data()['userName'].toString(),
감사합니다~~
@@이성민-q3j5j 덕분에 잘 해결하였습니다. 감사합니다.
강의 감사합니다~!
1월부터 달려서 여기까지 들었어요 좋은 강의 늘 감사합니다,,
대단하시네요. 추후에 업로드될 강의들도 관심 부탁드립니다. ^^
얼평앱 영상 재밌게 봤었는데 여기서 뵙네요 ㅎ
화이팅입니다.
이번 강좌도 잘봤습니다!
선생님 감사합니다!
셰프님 !
유저네임을 입력하고 받아올때, 따로 데이터베이스에 저장하지 않고 , displayName에 저장을 했습니다. 그래서 signup할때 동시에 텍스트필드에서 입력된 userName을 displayName에 넣고 chatbubble에서 유저네임을 출력되게 했는데, signup하고 채팅을 보냈을때 username이 null값이 나오네요.. sginout했다가 다시 login 하면 잘 출력되는게 무엇이 문제일까요 ?
코딩셰프님 제가 8:10초에서 코드를 마치고 같이 점검을 하니 빨간색 화면과 함께 콘솔에
Bad state: field does not exist within the DocumentSnapshotPlatform 라는 오류 문구가 떴을 때는 어떻게 하면되나요?
댓글들 중에서 "이성민"의 질문에 제가 답한 내용을 참고해 보기 바랍니다.
강의 감사합니다. 다이얼로그창 띄우는 걸 몰라서 구글을 한참 뒤졌었는데 바로 가르쳐주시네요. 다음번엔 로그인, 회원가입이나 채팅창 입력시 엔터키 누르면 form data 전송할 수 있는 법도 알려주시면 좋겠습니다
input widget에서 onSubmittted: 뒤에 액션 입력하시면 엔터키 누를 때 자동으로 전송이 됩니다
8분 40초 즘에 말풍선에 userName을 좌측 우측 붙이는 코드에서요(Column의 crossAxisAlignment) isMe 삼항연산자는 필요없어 보입니다.
이유는 이미 저 코드 블럭은 상위에 isMe로 체크해서 만든 ChatBubble이니... 제가 생각한게 맞을까요?
제 생각에도 그렇습니다! 삼항 연산자 없이 해도 될 것 같아요
강의 너무 잘 들었습니다!!! 혹시 회원가입 후 채팅화면이 아닌 회원가입 화면 그대로 유지 시키려면 어떻게 해야될까요??
super thanks!!
강의 정말 감사합니다. 그런데 userName 이 계속 null 값으로 출력됩니다. 해결 방안이 있을까요?
해결 했습니다. 이메일에 test 란 단어를 넣어서 생성하면 userName 이 계속 null 값을 출력해주네요. 다른 단어로 하면 정상 출력됩니다.
매우 잘 보고 있습니다. 언제부턴가 핫리로드를 시키면
One or more plugins require a higher Android SDK version.
Fix this issue by adding the following to C:\Users\kimjiho\Desktop\TEST\tetopia\android\app\build.gradle:
android {
compileSdkVersion 32
...
이러한 경고문이 발생하는데 이건 어떻게 해결 해야 하나요?
프로젝트 폴더 -> android -> app -> build.gradle로 가서 compileSdkVersion 을 31 or 32로 바꾸어 주기 바랍니다.
@@codingchef 답변 감사합니다. 그런데 구글링을 해도 다 이런답변 뿐이던데 제꺼에는
compileSdkVersion flutter.compileSdkVersion
그리고 app수준의 build.gradle 에서 Properties() 와 GradleException 에 글씨가 빨갛게 되었는데 이것도 왜 그런지 모르겠습니다. 혹시 알고 계시면 답변 부탁드려요~
@@YOONEEWORLD 에러라고는 할 수 없지만 이 부분은 우선 그냥 그러려니 하면 됩니다. 한 번 파일을 열면 계속 빨간 밑줄이 그어져서 신경 쓰이긴 하지만 앱을 만드는데에는 아무 문제 없습니다.
@@YOONEEWORLD 혹시 제가 공유해 드린 프로젝트를 사용하고 계신지요?
셰프님의 플러터 코딩 쿠킹을 무진장 맛있게 봅니다.
코딩쉐프님이 강의하시는 provider도 꼭 한번 보고싶습니다.
다음 채팅앱 마지막 강좌 이후로 provider 강의가 이어질 예정입니다.
@@codingchef 와우
코딩셰프님 userName 부분을 추가한 후에 채팅을 치면 [ERROR:flutter/lib/ui/ui_dart_state.cc(198)] Unhandled Exception: Null check operator used on a null value 이러한 에러가 나면서 firebase에도 값이 저장이 안됩니다.... 어떻게 해결해야 할까요...?
이 에러는 주로 초기화 되지 않은 인스턴스에 !를 사용했을 때 발생하는 에러입니다.
현재 질문한 내용만으로는 구체적인 답변을 드리기가 어렵습니다.
Git에 소스코드도 공유해 드렸으니 관련 부분 코드를 다시 한 번 확인해 보기 바랍니다.
@@codingchef 감사합니다
제가 옳게 한건지 모르겠는데, 느낌표 대신 물음표를 넣으니까 그 에러가 안 나왔어요
안녕하세요! 쉐프님! 요번 강의도 잘 보았습니다. 제대로 학습하겠습니다.
한가지 강의 건의사항이 있습니다. firebase 연동을 하다가 최근에는 새롭게 연동하는 방법이 나왔다고 알게되었는데요, dart pub global activate flutterfire_cli 를 명령창에 입력 하면 자동으로 연동이 진행된다해서 시도해봤으나 엄청난 에러에 헤매고 있네요 ㅡㅡㅋ , 혹시 관련해서 최근에 도입된 firebase 연동에 관한 보충강의가 가능하실지 여쭤봅니다. 항상 감사합니다 쉐프님~
예. 한 번 고려해 보겠습니다.
네 감사합니다 ^^
사진 이미지 등록 언제쯤 해볼수 있을까요?
다음 강좌입니다. 조만간 업로드하겠습니다.
@@codingchef 감사합니다
안녕하세요 셰프님, 좋은 강의 항상 감사드립니다.
처음으로 질문드리네요 ^^;
저만 그런건지 모르겠는데요..
main_screen에서 SIgnup 때 createUserWithEmailAndPassword 직후에 user 컬렉션에 유저 uid 값으로 문서를 추가하고 값을 넣어 주는 부분이 있는데요.
여기서 아래와 같은 에러가 발생해서요..
I/flutter ( 6801): [cloud_firestore/permission-denied] The caller does not have permission to execute the specified operation.
Firestore 규칙에 아래 부분 때문에 거부되는 것 같아
match /user/{uid}{
allow read, write: if request.auth != null && request.uid == uid;
}
아래와 같이 request 의 uid 와 비교하는 부분을 삭제하니 제대로 추가가 됩니다.
match /user/{uid}{
allow read, write: if request.auth != null;
}
문서가 없는 상태에서 비교가 되지 않아 거부되는 것으로 보이는데,
강의 중간에 규칙 변경이 있었을까요? 아님 제가 놓친 부분이 있어 그런 것인지 알 수가 없네요.
가능하시다면 답변 부탁드립니다. 감사합니다!
파이어베이스 규칙을 보니 match /user/{uid}{
allow read, write: if request.auth != null && request.uid == uid; 에서 request뒤에 auth가 빠져 있습니다.
match /user/{uid}{
allow read, write: if request.auth != null && request.auth.uid == uid; 이렇게 추가해 주기 바랍니다.
@@codingchef 헐 제가 빼먹었군요, 감사합니다!
강의 정말 감사합니다.
궁금한것이 있습니다.
StreamBuilder(
stream:FirebaseFirestore.instance
.collection('chat')
.orderBy('time', descending: true)
.snapshots()에서
테스트기준 현재 Firestore에 100개넘는 채팅을 입력했습니다.
스트림으로 받아올때마다 모든 채팅 100개의 정보를 얻어오는데
걱정인 부분이 만약에 채팅이 10000개의 기록이 있으면 이걸 매번 전부 얻어오는건가요?
select top 100 같은 기능을 줄수있는 방법은 없나요?
자답입니다. .limit(int)옵션으로 조절이 가능하네요
혹시 안드로이드 앱을 만들어본 경험이 있다면 RecyclerView라는 것을 들어보셨을 거 같습니다.
리스트 뷰에서 매번 새로운 내용이 추가 될 때마다 이전의 모든 내용들까지도 다시 불러와서 앱의 성능이 떨어지는 것을 개선하기 위한 것입니다.
이 역할을 하는 것이 flutter에서는 ListView.builder라고 이해하시면 될 거 같습니다.
즉, 화면이 보여지는 만큼만 데이터를 불러오기 때문에 앱이 느려지거나 하는 성능 저하를 막을 수 있습니다.
그러니 굳이 현시점에서라면 select top 100 같은 기능을 고민하지 않아도 될 거 같습니다.
lib/chatting/chat/new_message.dart:24:18: Warning: Operand of null-aware operation '!' has type 'User' which excludes null.
- 'User' is from 'package:firebase_auth/firebase_auth.dart' ('/D:/flutter/.pub-cache/hosted/pub.dartlang.org/firebase_auth-3.4.1/lib/firebase_auth.dart').
'userID' : user!.uid,
^
Reloaded 1 of 906 libraries in 1,592ms.
이렇게 나와서
'userID' : user.uid로 바꿔줬더니 돌아갑니다.