묻고 답해요
138만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결[Bloc 응용] 실전 앱 만들기 (책 리뷰 앱) : SNS 로그인, Firebase 적용, Bloc 상태 관리, GoRouter
appBar 텍스트 컬러 적용이 안돼요!
앱바 텍스트를 색을 지정하고 돌리면 글자가 안 나타납니다..
-
해결됨[Bloc 응용] 실전 앱 만들기 (책 리뷰 앱) : SNS 로그인, Firebase 적용, Bloc 상태 관리, GoRouter
모델 객체에 대해
안녕하세요 개남님NaverBookInfoResults객체나 다른 모델 객체들도 선언할때 null허용을 하는 이유가 뭔가요?(?를 붙이는 이유)사실 null이 있으면 안되지 않나요? class NaverBookInfoResults extends Equatable{ final int? total; final int? start; final int? display; final List<NaverBookInfo>? items; }
-
해결됨[Bloc 응용] 실전 앱 만들기 (책 리뷰 앱) : SNS 로그인, Firebase 적용, Bloc 상태 관리, GoRouter
네이버api프로젝트세팅부분에서
안녕하세요!dio주입할때 MyApp에서 바로 생성해서 NaverBookRepository(dio)에 넣어주면 되지 않나요? 왜 main()함수에서 넣어주는지 궁금합니다!나중에 혼자서 프로젝트를 할때 이런 부분이 헷갈릴것 같아서요또한 stateful위젯에서stateful위젯을 상속받는 class와 (ex App) state를 상속받는 class(ex _AppState)에서 변수를 사용할 때 어떨때 stf위젯에 써서 state로 넘겨주는지, 아니면 state위젯 자체에서 바로 선언하고 쓰는지 알 수 있을까요??stf위젯은 계속생성이되고, state위젯은 한번생성되면 (initState) build부분만 재 빌드 되잖아요 이 차이를 이용해서 하는것 같은데 구체적인 감은 안잡혀서요개남님의 지식공유 부탁드립니다 ㅠㅠ!
-
미해결[플러터 상태관리] Bloc 마스터 코스 기초부터 응용까지!
잘 모르겠어요
따라쳐볼때 전체적인 구조나 흐름을 잘 모르겠어서 따라치지않고 그냥 봐도 잘 모르겠네요.. 여러번 보면 괜찮을까요?? bloc사용할거라 후속작 책 리뷰앱도 결제했는데 getX부터 잘 모르겠어요.. getX 유튜브강의 따로 내놓으신거있던데 그걸봐야할까요?시간낭비일까요.. 큰일이네요..(setState까진 이해했습니다..)
-
해결됨[Bloc 응용] 실전 앱 만들기 (책 리뷰 앱) : SNS 로그인, Firebase 적용, Bloc 상태 관리, GoRouter
doc id와 uid
firestore database에서 users의 doc id를 uid값과 동일한 값으로 입력할 수 있나요? 데이터 구조를 그렇게 만들어도 무방한가요?
-
해결됨[Bloc 응용] 실전 앱 만들기 (책 리뷰 앱) : SNS 로그인, Firebase 적용, Bloc 상태 관리, GoRouter
실제 폰에서 테스트 시 리뷰 작성 버튼 위치
강사님.. 안녕하세요?좋은 강의 제공해 주셔서 감사드립니다.다름이 아니라 버그까진 아니지만, 실제 폰에 설치를 해서 테스트 해 보니리뷰 작성시에 내용을 쓰고 저장하기 버튼을 클릭할 수 없는 상황이 되더라고요.키보드가 내려오든가 입력 텍스트 박스를 줄이던가, 버튼이 누를 수 있게 올라가든가 하는 부분이 필요하지 않을까 생각됩니다.
-
해결됨[초중급] Flutter Todo 앱 - FlutterBloc
[공유] Hive generator 실습 중 FolderAdapter::read 메서드가 return Folder() 로 생성되는 이슈
pubspec.yamlenvironment: sdk: '>=3.1.2 <4.0.0' dependencies: flutter: sdk: flutter freezed_annotation: 2.4.1 cupertino_icons: ^1.0.2 get_it: 7.2.0 hive: 2.2.3 hive_flutter: 1.1.0 intl: 0.17.0 dev_dependencies: build_runner: 2.4.8 flutter_test: sdk: flutter flutter_lints: ^2.0.0 freezed: 2.4.7 hive_generator: 2.0.1 json_serializable: 6.7.1folder.g.dart 파일class FolderAdapter extends TypeAdapter<Folder> { ... @override Folder read(BinaryReader reader) { ... return Folder(); } ... }
-
해결됨[초중급] Flutter Todo 앱 - FlutterBloc
[공유] Hive generator 실습 중 FolderAdapter::read 메서드가 return Folder() 로 생성되는 이슈
environment: sdk: '>=3.1.2 <4.0.0' dependencies: flutter: sdk: flutter freezed_annotation: 2.4.1 cupertino_icons: ^1.0.2 get_it: 7.2.0 hive: 2.2.3 hive_flutter: 1.1.0 intl: 0.17.0 dev_dependencies: build_runner: 2.4.8 flutter_test: sdk: flutter flutter_lints: ^2.0.0 freezed: 2.4.7 hive_generator: 2.0.1
-
해결됨[Bloc 응용] 실전 앱 만들기 (책 리뷰 앱) : SNS 로그인, Firebase 적용, Bloc 상태 관리, GoRouter
샘플 소스 전체 다운받아볼 수 있을까요?
안녕하세요?현재 7장까지 잘 따라하다가, 프로필 이미지가 정상 업로드 된거 같은데 홈화면에서 제대로 표시가 안되어 무엇이 문제인지 찾고 있습니다.샘플소스가 있다면 관련 부분 비교해 보고 싶은데 개남님 github 찾아봐도 bookreview 프로젝트가 안보이드라고요. 전체 full 소스 받아볼수 있다면 관련 부분 비교해 보고 싶습니다.
-
미해결[플러터 상태관리] Bloc 마스터 코스 기초부터 응용까지!
후속 강의 질문
안녕하세요혹시 이 강의 후속작인 [Bloc 응용] 실전 앱 만들기 (책 리뷰 앱) : SNS 로그인, Firebase 적용, Bloc 상태 관리, GoRouter대시보드 강의에서는 cubit이 아닌 bloc에 대해서 다루고 있는지 궁금합니다!
-
해결됨[Bloc 응용] 실전 앱 만들기 (책 리뷰 앱) : SNS 로그인, Firebase 적용, Bloc 상태 관리, GoRouter
애플 로그인 위해 애플 개발자 인증센터는 Developer 프로그램 가입해야 하나요?
안녕하세요?현재까지는 잘 따라오고 있다가 애플 인증센터에서 막혔는데요.강사님과 같은 화면이 나오지 않고 약간 간소화된 화면이 나오는데요.Apple Developer Program 가입 안해서 이런 화면이 나오는거 같은데, 반드시 가입해야 하나요?가입을 하려면 129,000 원 내라고 하던데, 임시로 테스트로 할 수 있는 방안은 없는지요?
-
해결됨[Bloc 응용] 실전 앱 만들기 (책 리뷰 앱) : SNS 로그인, Firebase 적용, Bloc 상태 관리, GoRouter
GoogleService-Info.plist > REVERSED_CLIENT_ID 안보입니다.
아무리 찾아봐도 안보이는데 뭐가 잘못된 것일까요?<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>API_KEY</key> <string>AIzaSyDrx2zMhB0rjE20rHntX6p1qG2Ya5y39JA</string> <key>GCM_SENDER_ID</key> <string>914949717898</string> <key>PLIST_VERSION</key> <string>1</string> <key>BUNDLE_ID</key> <string>com.archy712.bookreviewhome01.bookreviewHome01</string> <key>PROJECT_ID</key> <string>bookreview-home-01</string> <key>STORAGE_BUCKET</key> <string>bookreview-home-01.appspot.com</string> <key>IS_ADS_ENABLED</key> <false></false> <key>IS_ANALYTICS_ENABLED</key> <false></false> <key>IS_APPINVITE_ENABLED</key> <true></true> <key>IS_GCM_ENABLED</key> <true></true> <key>IS_SIGNIN_ENABLED</key> <true></true> <key>GOOGLE_APP_ID</key> <string>1:914949717898:ios:66b1d2b693a784b6029273</string> </dict> </plist>
-
해결됨[Bloc 응용] 실전 앱 만들기 (책 리뷰 앱) : SNS 로그인, Firebase 적용, Bloc 상태 관리, GoRouter
즐겨찾기 기능 질문 요청드립니다..
페이지 처음진입시 즐겨찾기 클릭하면정상적으로 별이 on 으로 바뀌게 되는데" 한번끄고 다시 키면 on으로 바뀌지않고 off 형태의 아이콘이되어있고 다시 뒤로갔다가 들어오면 정상적으로 on 으로 바껴있습니다 !!= 파이어베이스 db 상에는 데이터가 들어오지만상태가 바뀌지않아서 off 상태일때 10번누르면10번이 다 firebase db에 insert 되는현상이 나타납니다 ㅠㅠprofilePageactions: [ GestureDetector( onTap: () { var myUid = context.read<AuthenticationCubit>().state.user!.uid; context.read<UserProfileCubit>().followToggleEvent(myUid!); }, child: Padding( padding: const EdgeInsets.only(right: 20), child: BlocBuilder<UserProfileCubit,UserProfileState>( builder: (context,state) { var myUid = context.read<AuthenticationCubit>().state.user!.uid; var isFollowing = state.userModel?.followers?.contains(myUid) ?? false; return SvgPicture.asset(isFollowing ? 'assets/svg/icons/icon_follow_on.svg' :'assets/svg/icons/icon_follow_off.svg'); } ), ),user profile cubit void followToggleEvent(String myUid) async { if (state.userModel!.followers != null && state.userModel!.followers!.contains(myUid)) { // 즐겨찾기 취소 언팔 var result = await userRepository.followEvent(false,state.userModel!.uid!,myUid); if (result) { await _unfollow(myUid); } } else { // 즐겨 찾기 하기 var result = await userRepository.followEvent(true,state.userModel!.uid!, myUid); if (result) { await _follow(myUid); } } } _unfollow(myUid) async { emit( await state.copyWith( userModel: state.userModel!.copyWith( followers: List.unmodifiable( [...state.userModel!.followers!.where((targetUid) => targetUid != myUid)], ), ), ), ); } _follow(myUid) async { print(state.userModel!.followers); if (state.userModel!.followers == null) { // 최초 팔로워 대상 emit( await state.copyWith( userModel: state.userModel!.copyWith( followers: List.unmodifiable( [myUid], ), ), ), ); } else { // 다른사람이 이미 팔로워 한사람 emit( await state.copyWith( userModel: state.userModel!.copyWith( followers: List.unmodifiable( [ ...state.userModel!.followers!, uid ], ), ), ), ); } } }user-repositoryFuture<bool> followEvent(bool isFollow,String targetUid, String myUid) async { try { // 2 가지 업데이트 ( 트랜잭션 실행 필요 ) final batch = db.batch(); // Type1 . 상대방 팔로워에 내가 들어가는건다.. var targetUserDoc = await db.collection("users").where("uid", isEqualTo: targetUid).get(); UserModel targetUserInfo = UserModel.fromJson(targetUserDoc.docs.first.data()); var followers = targetUserInfo.followers ?? []; // 최초사람 if (isFollow) { followers.add(myUid); } else { followers.remove(myUid); } var targetRef = db.collection("users").doc(targetUserDoc.docs.first.id); batch.update(targetRef, {'followers': followers}); // Type1 . 내 팔로워에 상대방이 들어간다... var myUserDoc = await db.collection("users").where("uid", isEqualTo: myUid).get(); UserModel myUserInfo = UserModel.fromJson(myUserDoc.docs.first.data()); var followings = myUserInfo.followings ?? []; if (isFollow) { followings.add(targetUid); } else { followings.remove(targetUid); } var MyRef = db.collection("users").doc(myUserDoc.docs.first.id); batch.update(MyRef, {'followings': followings}); await batch.commit(); return true; } catch (e) { return false; } }
-
해결됨[Bloc 응용] 실전 앱 만들기 (책 리뷰 앱) : SNS 로그인, Firebase 적용, Bloc 상태 관리, GoRouter
리뷰작성 별점 문의
안녕하세요 개남님!! 다름이아니라 리뷰작성페이지에서 별점을 올려놓고 리뷰 입력할려고 텍스트 필드를 클릭하고 나면 별점이 0.00 으로 다시 되돌아가고 있습니다. 그리고 save 저장할대 값은 5.44 대로 잘 들어오고 있는 현상이 나타납니다 ㅠ..ㅠ리뷰 슬라이드바는 공유 해주신 dart 파일 그대로 사용하였구용 import 'package:book1/src/common/components/app_divider.dart'; import 'package:book1/src/common/components/review_slider_bar.dart'; import 'package:book1/src/common/model/naver_book_info.dart'; import 'package:book1/src/review/cubit/review_cubit.dart'; import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:flutter_svg/svg.dart'; import 'package:go_router/go_router.dart'; import '../../common/components/app_font.dart'; import '../../common/components/btn.dart'; class ReviewPage extends StatelessWidget { NaverBookInfo naverBookInfo; ReviewPage(this.naverBookInfo, {super.key}); @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( leading: GestureDetector( onTap: context.pop, child: Padding( padding: const EdgeInsets.all(15.0), child: SvgPicture.asset('assets/svg/icons/icon_arrow_back.svg'), ), ), title: AppFont( "리뷰 작성", size: 18, ), centerTitle: true, ), body: Column( children: [ _HeaderBookInfo(naverBookInfo), AppDivider(), Expanded(child: _ReviewBox()), ], ), bottomNavigationBar: Padding( padding: EdgeInsets.only( left: 20, right: 20, top: 20, bottom: 20 + MediaQuery.of(context).padding.bottom), child: Btn( onTap: context.read<ReviewCubit>().save, text: '저장', ), ), ); } } class _ReviewBox extends StatelessWidget { _ReviewBox({super.key}); @override Widget build(BuildContext context) { return TextField( // 전체화면 텍스트필드 maxLines: null, decoration: const InputDecoration( border: InputBorder.none, hintText: "리뷰를 입력해주세요", contentPadding: EdgeInsets.symmetric(horizontal: 25), hintStyle: TextStyle( color: Color(0xff585858), ), ), onChanged: context.read<ReviewCubit>().changeReview, style: TextStyle(color: Colors.white), ); } } class _HeaderBookInfo extends StatelessWidget { final NaverBookInfo naverBookInfo; _HeaderBookInfo(this.naverBookInfo, {super.key}); @override Widget build(BuildContext context) { return Padding( padding: const EdgeInsets.all(25.0), child: Row( children: [ ClipRRect( borderRadius: BorderRadius.circular(7), child: SizedBox( width: 71, height: 106, child: Image.network( naverBookInfo.image ?? '', fit: BoxFit.fill, )), ), SizedBox( width: 15, ), Expanded( //어디 영역까지 사용할거냐 child: Column( crossAxisAlignment: CrossAxisAlignment.stretch, children: [ AppFont( naverBookInfo.title ?? '', size: 16, fontWeight: FontWeight.bold, ), SizedBox( height: 5, ), AppFont( naverBookInfo.author ?? '', size: 12, color: Color(0xff878787), ), SizedBox( height: 10, ), ReviewSliderBar( onChange: context.read<ReviewCubit>().changeValue, ), ], ), ) ], ), ); } }
-
해결됨[Bloc 응용] 실전 앱 만들기 (책 리뷰 앱) : SNS 로그인, Firebase 적용, Bloc 상태 관리, GoRouter
플러터 바탕화면 빠진후 앱 진행시
안녕하세요 . 섹션7의 검색 라우터를 진행하다가 우연히 바탕화면에 들어갔다가 앱마크를 재생버튼이 아닌앱 마크를 클릭을 했더니 splash 화면에서 로딩중으로만 계속 되어있고print를 찍었더니 아예 App()에 있는 Gorouter 자체를 타지를 않는 현상이 생기고 있습니다.혹시 바탕화면 갔다가 다시 홈페이지 화면으로 들어가려고 하는데방법이 있을까 해서 글을 작성드렸습니다. 감사합니다 ㅠㅠ
-
해결됨[Bloc 응용] 실전 앱 만들기 (책 리뷰 앱) : SNS 로그인, Firebase 적용, Bloc 상태 관리, GoRouter
구글 로그인 관련 질문합니다.
로그아웃하고 난 뒤 다시 구글 계정 로그인 버튼을 누르면 전에 로그인 했던 계정으로 바로 넘어가는데구글 다른 계정으로 로그인 할 수 있는 방법이 있을까요?
-
해결됨[Bloc 응용] 실전 앱 만들기 (책 리뷰 앱) : SNS 로그인, Firebase 적용, Bloc 상태 관리, GoRouter
즐겨찾기 기능 구현 부분 오류 질문합니다.
즐겨찾기를 누르면 이러한 오류가 뜨는데 어디가 잘못된 걸까요?
-
해결됨[Bloc 응용] 실전 앱 만들기 (책 리뷰 앱) : SNS 로그인, Firebase 적용, Bloc 상태 관리, GoRouter
17강 진행중입니다..
강의 순서대로 따라하고 있는데구글 sns 등록하고 시뮬레이터 켜보니 Class 'StatelessElement' has no instance method 'read'.Receiver: Instance of 'StatelessElement'Tried calling: read<AuthenticationCubit>() 란 오류가 뜨네요 ㅠ찾아보니 밑 login_page 중 밑 read 부분인 것 같긴한데 정확히 모르겠습니다 ㅠWidget _appleLoginBtn(BuildContext, context) { return GestureDetector( onTap: context.read<AuthenticationCubit>().appleLogin(), child: Container(
-
해결됨[Bloc 응용] 실전 앱 만들기 (책 리뷰 앱) : SNS 로그인, Firebase 적용, Bloc 상태 관리, GoRouter
cloud Firestore 설정
FireStore Database에 들어가서 데이터베이스 생성하기 누르고 설정했는데 오류가 나더니이렇게 뜨네요,, 이런 경우 어떻게 해야 할까요,,?
-
해결됨[Bloc 응용] 실전 앱 만들기 (책 리뷰 앱) : SNS 로그인, Firebase 적용, Bloc 상태 관리, GoRouter
authentication_repository.dart 오류 질문합니다.
구글 로그인 버튼을 누르면 이런 오류가 뜨는데뭐가 잘못된 걸까요??