묻고 답해요
130만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨Flutter로 SNS 앱 만들기
Provider 사용법 질문
저는 원래 Provider를 ChangeNotifier와 함께 사용하여notifyListener()를 통해 필요할 때 빌드호출을 진행하였습니다 이 강의에서는 각 State를 extends하고 LocatorMixin 후read/watch를 통해 상태를 관리하는 것 같습니다 보통 state를 따로 만들어 stateNotifier로 관리하는 게 더욱 표준적인 방법일까요?
-
해결됨Flutter로 SNS 앱 만들기
Firebase
Firebase로 배포까지 가능한가용 .?
-
해결됨Flutter로 SNS 앱 만들기
flutter 프로젝트와 firebase연동
확인차 문의 드려요. 새 프로젝트 할때 마다 강의 내용처럼 매번 설치 해야 되는거죠.npm install -g firebase-toolsdart pub global activate flutterfire_cli..
-
미해결Flutter로 SNS 앱 만들기
저는 키보드 동작이 안돼는데 원래 그런가요.
저는 키보드 동작이 안돼는데요 원래 그런가요.에뮬레이터로 테스트 하는데 이상은 없지만 불편해서요.
-
해결됨Flutter로 SNS 앱 만들기
Firebase StreamBuilder 사용은 왜 안 하나요?
댓글 불러오는 과정을 보고 있는데, 지금까지 각 모델(feed, comment) 전부 Firebase에서 전체 document 받아와서 list로 변환 후, update 하고나면 Firebase에 업로드하는데 그와 동시에 screen에 반영하기 위해 새로 get하여 list를 만들어서 표시해주는 것 같습니다. Firebase StreamBuilder를 사용하면 실시간으로 모든 변화들이 바로 업데이트 되어서 기존에 많이 썼는데, 혹시 이렇게 하지 않는 이유가 있을까요? (데이터 통신이 불필요하게 많이 일어나서 트래픽/요금 등의 문제가 있다든지 하는 현실적인 이유가 있는지 궁금했습니다)
-
해결됨Flutter로 SNS 앱 만들기
저는 왜 signUp함수가 안나와요.
(사진)
-
해결됨Flutter로 SNS 앱 만들기
provider등록중 에러 발생 되었어요.
(사진)
-
해결됨Flutter로 SNS 앱 만들기
UI - State - Provider - Repository의 관계
안녕하세요. 기존에 제가 코딩할 때는 provider 파일에서 모든 동작, 상태변화를 한번에 처리했는데, 이 강좌에서는 이를 세분화하여 state, provider, repository 파일로 나눈 것 같습니다. 제가 초보여서 잘 모르겠지만, 플러터 업계에서는 이러한 작업패턴이 존재하는 것인가요? 정확한 명칭이 있나요? 제가 각 파일의 역할을 이해하지 못해서 구글링을 해봐도 원하는 답변을 찾을 수가 없어서 문의드립니다. 혹시 UI - State - Provider - Repository 관계를 개념적으로 설명해주시면 많은 도움 될 것 같습니다.
-
해결됨Flutter로 SNS 앱 만들기
firebase연동 에서 에러가 발생했어요.. 도움좀 부탁합니다
fierbase연동에 에러가 발생했어요.2번째 꺼 복사해서 실행 했는데 에러가 났어요.경로 문제인듯 한데요 모르겠습니다.
-
해결됨Flutter로 SNS 앱 만들기
저는 똑같이 다르네요.플러그인 설치편 보고있습니다
(사진)
-
해결됨Flutter로 SNS 앱 만들기
dart data class
dart data class 저는 없네요. 어떻게 진행하면 될까요
-
해결됨Flutter로 SNS 앱 만들기
직접 null일 경우를 작성한 경우
이렇게 직접적으로 null인 경우의 로직을 작성해주니깐 작동이 되긴 한데, Moo님처럼 그냥 isEqualTo만 사용해서는 여전히 안 되네요. 해결은 했지만 원인이 궁금합니다..!
-
해결됨Flutter로 SNS 앱 만들기
isEqualTo 부분
강의를 잘 따라오던 도중, feed_repository의 getFeedList함수에서 isEqualTo 부분(1분41초)에서 uid는 nullable이므로feedScreen에서는 자동으로 null값이 들어가면서 모든 게시물들을 띄워줄거라고 하셨는데, 말씀은 이해가 되지만현재 제 앱에서는 '게시물이 존재하지 않습니다.' 화면이 뜨네요. profile_screen에서는 잘 작동이 됩니다만, 혹시 feedScreen이나 feedProvider 부분에서 추가로 작성해줘야 하는 코드가 있을까요?
-
해결됨Flutter로 SNS 앱 만들기
firebase 관련오류
안녕하세요..사용자 인증 시 아래와 같은예외가 발생합니다. FirebaseAuthException ([firebase_auth/too-many-requests] We have blocked all requests from this device due to unusual activity. Try again later.) 여기저기 찾아봐도 이유를 모르겠습니다혹시, 이유를 아시면 답변 부탁드리겠습니다. 감사합니다.
-
해결됨Flutter로 SNS 앱 만들기
댓글 입력시 오류
안녕하세요 강의 잘 듣고 있습니다.강의에서 배운 내용을 토대로 다른 프로젝트에 적용하려 합니다. 그런데 댓글을 올릴 때 아래처럼 오류가 뜨는데 뭐가 문제일까요..?
-
해결됨Flutter로 SNS 앱 만들기
프로바이더 등록시 문제.
안녕하세요 강의 잘 듣고, 보고 있습니다<상태관리 등록후, 회원가입테스트 >코드 따라가던 중 첨부한 파일과 같은 오류가 발생하였습니다. 말그대로 클래스명을 변경하여, 우선 해결은 한거 같은데위와 같은 오류가 나는 원인 뭔지 궁금합니다. 감사합니다.
-
해결됨Flutter로 SNS 앱 만들기
깃 파일 받아서 바로 실행시켜보고 싶은데
깃 파일 받아서 바로 실행시켜보고 싶은데혹시 건드려야할 코드가 있을까요?
-
해결됨Flutter로 SNS 앱 만들기
회원가입화면
에뮬레이터를 실행하고 회원가입화면으로 보고 싶은데, main화면이 실행됩니다
-
해결됨Flutter로 SNS 앱 만들기
접속중인 사용자의 정보 가져오기 강의 관련 질문
안녕하세요.강의 잘 듣고 있습니다.접속중인 사용자의 정보 가져오기 강의 관련 질문 있습니다.아래와 같이 영상과 같이 코딩했는데 빨간 줄이 지워지지 않습니다.Future<UserModel> 로 함수 정의를 했는데 빨간 줄이 지워지지 않습니다.무슨 문제인지 모르겠습니다. 바쁘신데 질문 읽어주셔서 감사합니다.
-
해결됨Flutter로 SNS 앱 만들기
사용자 정보, 게시글 정보를 Model 클래스로 관리 강의 관련 질문
안녕하세요.강의 잘 듣고 있습니다.사용자 정보, 게시글 정보를 Model 클래스로 관리 강의 관련 질문 있습니다.그 전 강의인 firestore에 게시글 정보 저장 강의 까지는 firestore database에 정상적으로 data가 올라갔습니다.하지만, 사용자 정보, 게시글정보를 Model 클래스로 관리 강의에 따라 코드 작성 후firestore database에 data가 올라가지 않습니다.(storage는 잘 작동합니다.)//feed_model.dart // ignore_for_file: public_member_api_docs, sort_constructors_first import 'dart:convert'; import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:collection/collection.dart'; import 'package:sns_clonecode/models/urser_model.dart'; class FeedModel { final String uid; final String feedId; final String desc; final List<String> imageUrls; final List<String> likes; final int commentCount; final int likeCount; final Timestamp creatAt; final UserModel writer; const FeedModel({ required this.uid, required this.feedId, required this.desc, required this.imageUrls, required this.likes, required this.commentCount, required this.likeCount, required this.creatAt, required this.writer, }); Map<String, dynamic> toMap({ required DocumentReference<Map<String, dynamic>> userDocRef, }) { return { 'uid': this.uid, 'feedId': this.feedId, 'desc': this.desc, 'imageUrls': this.imageUrls, 'likes': this.likes, 'commentCount': this.commentCount, 'likeCount': this.likeCount, 'creatAt': this.creatAt, 'writer': userDocRef, }; } factory FeedModel.fromMap(Map<String, dynamic> map) { return FeedModel( uid: map['uid'], feedId: map['feedId'], desc: map['desc'], imageUrls: List<String>.from((map['imageUrls'])), likes: List<String>.from((map['likes'])), commentCount: map['commentCount'], likeCount: map['likeCount'], creatAt: map['creatAt'], writer: map['writer'], ); } } //user_model.dart // ignore_for_file: public_member_api_docs, sort_constructors_first import 'dart:convert'; class UserModel { final String uid; final String name; final String email; final String? profileImage; final int feedCount; final List<String> followers; final List<String> following; final List<String> likes; const UserModel({ required this.uid, required this.name, required this.email, required this.profileImage, required this.feedCount, required this.followers, required this.following, required this.likes, }); factory UserModel.init() { return UserModel( uid: '', name: '', email: '', profileImage: null, feedCount: 0, followers: [], following: [], likes: [], ); } //usermodle 이 가지고 있는 filed 변수로 가지고 있는 데이터들을 가지고 map 형태 데이터를 만들어 준다. Map<String, dynamic> toMap() { return { 'uid': this.uid, 'name': this.name, 'email': this.email, 'profileImage': this.profileImage, 'feedCount': this.feedCount, 'followers': this.followers, 'following': this.following, 'likes': this.likes, }; } //map 형태 데이터를 인자값을 전달 받아 usermolde 객체를 만들어 준다. factory UserModel.fromMap(Map<String, dynamic> map) { return UserModel( uid: map['uid'], name: map['name'], email: map['email'], profileImage: map['profileImage'], feedCount: map['feedCount'], followers: List<String>.from(map['followers']), following: List<String>.from(map['following']), likes: List<String>.from(map['likes']), ); } } //feed_repository.dart import 'dart:io'; import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:firebase_storage/firebase_storage.dart'; import 'package:sns_clonecode/models/feed_model.dart'; import 'package:sns_clonecode/models/urser_model.dart'; import 'package:sns_clonecode/utils/logger.dart'; import 'package:uuid/uuid.dart'; class FeedRepository { final FirebaseStorage firebaseStorage; final FirebaseFirestore firebaseFirestore; const FeedRepository({ required this.firebaseFirestore, required this.firebaseStorage, }); Future<void> uploadFeed({ required List<String> files, required String desc, required String uid, //feeds 컬렉션에 저장 //피드 각각이 문서 //이미지는 storage에 직접 저장하고 firestore에 접근할 수 있는 url 문자열로 받을 것이다. //좋아요 수 //이 게시글에 달린 댓글의 수 //게시글을 작성한 날짜 //feeds에서 user의 정보를 바로 가져올 수 있게 reference 타입의 데이터를 저장한다. }) async { //파이어스토어에 데이터 저장하기위해서 //문서 아이디는 겹치지 않는 고유한 값으로 만들어야 한다. //a-z 알파벳 //0~9 숫자 //이 두가지를 조합해서 32글자의 고유한 값을 만들어 준다. //32글자에 - 4개씩 들어가서 36글자가 된다. //고유한 값을 만드는 방법 여러가지 version1 .... //우리는 version1을 사용 (현재 시간을 기준으로 random값을 만들어 준다.) String feedId = Uuid().v1(); //firestore 문서 참조 DocumentReference<Map<String, dynamic>> feedDocRef = firebaseFirestore.collection('feeds').doc(feedId); DocumentReference<Map<String, dynamic>> userDocRef = firebaseFirestore.collection('users').doc(uid); //storage 참조 Reference ref = firebaseStorage.ref().child('feeds').child(feedId); List<String> imageUrls = await Future.wait(files.map((e) async { //문자열 e는 이미지 파일에 접근할 수 있는 경로 String imageId = Uuid().v1(); TaskSnapshot taskSnapshot = await ref.child(imageId).putFile(File(e)); return await taskSnapshot.ref.getDownloadURL(); }).toList()); DocumentSnapshot<Map<String, dynamic>> userSnapshot = await userDocRef.get(); UserModel userModel = UserModel.fromMap(userSnapshot.data()!); FeedModel feedModel = FeedModel.fromMap({ 'uid': uid, 'feedId': feedId, 'desc': desc, 'imageUrls': imageUrls, 'likes': [], 'likeCount': 0, 'commentCount': 0, 'createAt': Timestamp.now(), 'writer': userModel, }); await feedDocRef.set(feedModel.toMap(userDocRef: userDocRef)); // await feedDocRef.set({ // 'uid': uid, // 'feedId': feedId, // 'desc': desc, // 'imageUrls': imageUrls, // 'likes': [], // 'commentCount': 0, // 'likeCount': 0, // 'creatAt': Timestamp.now(), // 'writer': userDocRef, // }); await userDocRef.update({ 'feedCount': FieldValue.increment(1), }); } } 바쁘실 텐데 질문 읽어주셔서 감사합니다.