게시글
질문&답변
2024.11.11
Storage사용..?
2024년 11월 1일 부터, Firebase 의 각종 서비스를 사용하기 위해서는 서비스 사용량에 따라 요금이 책정되는 Blaze 요금제를 이용하도록 변경되었습니다. Blaze 요금제를 이용하기 위해서는 신용카드가 필요합니다만, 일정 사용량을 초과하지 않는 이상, 요금이 청구되지 않으며 무료 이용량 내에서 충분히 작업이 가능할 것으로 생각합니다. 자세한 내용은 firebase 의 가격 정책을 확인 부탁드립니다. firebase 정책이 변경된 것을 미리 확인하지 못하고 강의 진행에 차질이 생기게 되어 죄송합니다. 유하님의 결제 정보를 확인하니, 환불이 가능한 것으로 보입니다. Blaze 요금제 이용이 불편하시다면 대단히 죄송하지만, 더 이상 강의를 진행하지 마시고 11월 14일 까지 인프런으로 환불 신청을 부탁드립니다.
- 0
- 2
- 42
질문&답변
2024.08.19
MessageCardWidget에 프로필 사진과 이름이 남는 이유
기대했던 결과와 실제로 출력된 결과를 자세히 말씀해주시면 감사하겠습니다. 그리고 프로젝트 전체의 소스 코드를 gobackad001@gmail.com 으로 보내주세요.
- 0
- 1
- 171
질문&답변
2024.08.15
섹셕9 좋아요 기능추가에서
어떤 부분이 문제인가요?
- 0
- 2
- 70
질문&답변
2024.08.12
상태에서 가져오는 방식 vs. Provider에서 가져오는 방식
currentUserModel 에는 현재 접속중인 유저(나 자신)의 정보를 갖고 있는 UserModel 을 전달해야 합니다.state.model.userList 는 채팅방에 참여중인 유저들의 UserModel 객체가 저장되어 있는 리스트 이죠.이 리스트의 0번 index 의 데이터가 항상 현재 접속중인 유저의 정보를 갖는 UserModel 객체라고 보장할 수는 없기 때문입니다. 채팅에 참여 중인 상대방의 UserModel 일 수도 있기 때문에 authProvider 에서 가져오는 것 입니다.
- 0
- 2
- 133
질문&답변
2024.08.10
8섹션 follow,unfollow기능추가 에서
List following = await currentUserDocRef.get().then( (Value) => List.from(value.data()!['following']), );위의 코드에서 Value 와 value 는 이름이 같아야 합니다. 둘 다 Value 또는 value 로 바꾸시면 됩니다.profile_screen.dart 의 114행에 보시면 currentUerModel 라고 변수를 선언하셨습니다.그리고 169행에서는 currentUserModel 라고 작성하셨고요. currentUerModel 로 선언하셨으니 169행에서도 currentUerModel 로 호출하셔야 합니다.코드에 문제가 있으면 문제가 되는 코드에 빨간줄이 표시될 겁니다. 빨간줄에 마우스 커서를 가져가면 에러의 원인을 설명해줄거에요. 위와 같은 문제는 단순 오타이기 때문에 에러 메시지를 참고하는 것만으로도 금방 해결 가능한 문제라고 생각합니다. 저에게 질문을 하셔도 되지만, 제가 답변을 드리기까지 학습의 진행이 멈추게 되므로 위와 같은 간단한 문제는 직접 빠르게 해결하실 수 있을거라 생각합니다.
- 0
- 2
- 84
질문&답변
2024.07.31
firebase 연동 후 실행 시 충돌이 발생하여 실행이 안됩니다. ㅠㅠ 버전 충돌인거 같은데
프로젝트 소스코드를 gobackad001@gmail.com 으로 보내주시면확인 후, 다시 답변 드리겠습니다.
- 0
- 1
- 108
질문&답변
2024.07.27
섹터8접속중인 사용자의 정보표시에서 3:42
보내주신 코드로 테스트해보니 이미지가 잘 출력됐습니다.소스코드에 문제는 없는 것 같습니다.(사진)
- 0
- 4
- 119
질문&답변
2024.07.23
섹터8에서 에러인데 무슨말인가요.
profile_screen.dart 파일의 29행에서String uid = context.read().uid; 를String uid = context.read()().uid;로 작성하셨습니다.
- 0
- 3
- 134
질문&답변
2024.07.22
섹터8에서 에러인데 무슨말인가요.
에러 메시지만 봐서는 문제를 파악하기 어렵습니다.프로젝트 코드를 메일로 보내주세요.
- 0
- 3
- 134
질문&답변
2024.07.12
CircleAvatar 성능 향상
이미지를 표시할 때,게시물 이미지는 ExtendedImage.network 를 사용하고프로필 이미지는 ExtendedAssetImageProvider 를 사용하고 있습니다.ExtendedImage 의 문서를 찾아보니 cache 사용 기본 설정이ExtendedImage.network는 true, ExtendedAssetImageProvider 는 false 로 지정되어 있어서로딩 속도에 차이가 발생한 것 같습니다.아마도 이미지를 최초로 읽어올 때에는 게시물 이미지와 프로필 이미지 모두 로딩 시간에 큰 차이가 없고이후에 화면 이동이나 새로 고침으로 동일한 이미지를 읽어올 경우에 cache 를 사용하지 않는프로필 이미지의 로딩에 시간이 걸렸을 겁니다.해결 방법은 ExtendedAssetImageProvider 의 cache 속성값을 true 로 지정하면 됩니다.child: CircleAvatar( backgroundImage: userModel.profileImage == null ? ExtendedAssetImageProvider('assets/images/profile.png') as ImageProvider : ExtendedNetworkImageProvider( userModel.profileImage!, cache: true, ), radius: 18, ), 이미지를 로딩중일 때, 배경색이 아닌 로딩중임을 알려주는 위젯을 표시하는 방법은 ExtendedImage 의 loadStateChanged 속성을 사용하면 됩니다.다만, 프로필 사진의 ExtendedAssetImageProvider 에서는 loadStateChanged 속성을 사용할 수 없기 때문에코드의 수정이 필요합니다. class AvatarWidget extends StatelessWidget { final UserModel userModel; const AvatarWidget({ super.key, required this.userModel, }); @override Widget build(BuildContext context) { return GestureDetector( onTap: () { Navigator.push( context, MaterialPageRoute( builder: (context) => ProfileScreen( uid: userModel.uid, ), ), ); }, // ExtendedImage 를 사용하기 위해서 아래와 같이 수정 child: userModel.profileImage == null ? ExtendedImage.asset( // CircleAvatar 의 반지름(radius)이 18 이었으므로 // 이미지의 높이와 너비를 36으로 설정 width: 36, height: 36, // 이미지의 모양을 원형으로 설정 shape: BoxShape.circle, 'assets/images/profile.png', // 이미지를 높이, 너비 36의 원형의 모양에 꽉 차도록 설정 fit: BoxFit.cover, ) : ExtendedImage.network( width: 36, height: 36, shape: BoxShape.circle, userModel.profileImage!, fit: BoxFit.cover, // 이미지 로딩 상태에 따라 표시할 위젯을 설정 loadStateChanged: (state) { switch (state.extendedImageLoadState) { case LoadState.loading: case LoadState.failed: // 로딩중, 로딩 실패의 경우 CircularProgressIndicator 를 표시 return CircularProgressIndicator(); case LoadState.completed: // 로딩 완료의 경우, 이미지를 그대로 표시하기 위해서 null 반환 // (ExtendedImage 의 문서에서 null 을 반환하도록 알려주고 있습니다.) // https://pub.dev/packages/extended_image#demo-code return null; } }, ), // child: CircleAvatar( // backgroundImage: userModel.profileImage == null // ? ExtendedAssetImageProvider('assets/images/profile.png') // as ImageProvider // : ExtendedNetworkImageProvider( // userModel.profileImage!, // cache: true, // ), // radius: 18, // ), ); } }
- 0
- 2
- 120