묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결Flutter 고급 - 현업 수준의 아키텍처
플러터 환경분리 (production, qa 등) 질문
안녕하세요 강의 끝까지 잘 들었습니다.헌데 production, staging, qa 등 환경 분리는 어떻게 하시는지 궁금합니다.1강에서 관련 내용이 있었던것 같은데 마지막까지 들어봤을때 제가 놓친건지 내용을 찾기가 조금 어려웠어요.mock repository 가 있는것을 보면 제가 꼼꼼히 찾아보면 관련 내용이 어딘가 있을텐데.. 찾아보기 어렵네요저는 --dart-define, flavor, flutter의 dotenv 등 모두 좀 불만족 스러웠던것 같아요, 혹시 강사분께선 어떻게 하시는지 키워드만 알려주시면 제가 잘 찾아보겠습니다.
-
미해결100% 비개발자 바이브 코딩: 앱 200개로 월 140만 수익 노하우
왜 15강 18강이 똑같나요?
영상이 똑같습니다........
-
미해결Flutter 입문 - 안드로이드, iOS 개발을 한 번에 (with Firebase)
과거 ai없을때 듣고 다시 듣는 중인데
허허 돌겟.. 에이전트 붙여서강의 따라가니깐 금방금방이네요 게다가 주석으로 설명까지.. 크...
-
미해결비개발자 4주만에 수익화 서비스 만들기: AI 바이브코딩 웹 + 앱 ALL IN ONE
도와주세요 superbase
지금 현재날짜 12.28 슈퍼베이스 없어지고 자체클라우드 연동인데 강의는 다 슈퍼베이스 들어가서 이것저것하는데 공부가 진행이안돼요 보면서 따라해도 계속 막히고 그냥 저 혼자 맨땅에 헤딩하는 느낌이에요... 로그인기능 구현하는데 403에러나서 강의는 슈퍼베이스로 진행하는데 저혼자 그냥 어찌저찌 해보고있는데 강의를 보면서 진행이 안되니.. 미칠거같네요
-
해결됨Flutter 앱 개발 실전
37.provider 실습 문제점, 카트에서 상품이 지워지지 않습니다.
37.provider 실습 시, 코드는 동일하게 잘 작성된것 같은데, 카트에 담기기는 잘 되는데, 카트에서 상품 클릭 시 remove가 안되는 문제가 있습니다.class Cart extends StatelessWidget { const Cart({super.key}); @override Widget build(BuildContext context) { List<Product> cartProductList = context.select<ProviderCart, List<Product>>( (providerCart) => providerCart.cartProductList, ); return Scaffold( body: cartProductList.isEmpty /// Empty ? const Center( child: Text( "Empty", style: TextStyle(fontSize: 24, color: Colors.grey), ), ) /// Not Empty : ListView.builder( itemCount: cartProductList.length, itemBuilder: (context, index) { Product product = cartProductList[index]; return ProductTile( product: product, isInCart: true, onPressed: context.read<ProviderCart>().onProductPressed, ); }, ), ); } }
-
미해결비개발자 4주만에 수익화 서비스 만들기: AI 바이브코딩 웹 + 앱 ALL IN ONE
superbase 질문
현재 12.28일 수강중인데 슈퍼베이스라는것이 없어진거같아요 방문자수기록 추가할때도 슈퍼베이스 클릭하는게 아닌 채팅창에 자체 클라우드 허용할거냐아는 allow버튼이 나와서 그거 클릭했더니 되긴했는데 크레딧이 너무 빨리 끝나버렸어요 그 해결방법 카카오톡영상도 확인 했는데 그대로 따라 들어갔는데 superbase가 보이지않아요 어떻게 해야할까요.. ㅠㅠ 벌써 막힌거같아요
-
미해결100% 비개발자 바이브 코딩: 앱 200개로 월 140만 수익 노하우
아이디어 발굴 관련 질문
안녕하세요 선생님!먼저, 이렇게 좋은 컨텐츠를 만들어 주셔서 감사합니다. 평소 앱 수익화에 대해 관심이 많았는데, 어떻게 할 수 있을지에 대해서 고민이 많았습니다. 이 강의를 통해 고민을 해결 할 수 있을것 같습니다. 감사합니다!!아이디어 발굴 관련 궁금한것이 있어 질문 드립니다. 아이디어 발굴에 대한 부분이 중요할거라 생각 됩니다. 앱을 만들면서 감을 익혀 나가겠지만, 그래도 처음에 어떻게 가닥을 잡고 시작해야 하는지 막막합니다. 아이디어 발굴은 어떻게 하면 좋을까요? AI에게 질문을 해도 답변으로 받은 아이디어들이 진짜 괜찮은것들인지 확신이 들지 않습니다...어느 정도 심플한 아이디어여야 하는지? 예시가 있을까요?어떤 카테고리 또는 어떤 성격의 앱을 먼저 시작해 보면 좋을지?특정 아이디가 반응이 좋을지에 대한 판단은 어떻게 내리시는지? 기준이 있으신지?자신의 영역을 구축해 나가는 것을 어떻게 확인 할 수 있을지? 확인하는 특정 지표가 있는지?이 외에도 혹시 실례가 되지 않는다면 아이디어 선정 관련 팁들이 있다면 혹시 알려 주실수 있을까요? 앞으로 앱을 만들면서 대단히 도움이 많이 될것 같아서 부탁드립니다. 감사합니다!
-
미해결[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
emulator 실행 오류
코드팩토리 디스코드에 질문하면 더욱 빠르게 질문을 받아 볼 수 있습니다![코드팩토리 디스코드]https://bit.ly/3HzRzUM emulator 실행 시 하기와 같은 오류가 발생하는데요....The emulator process for AVD Pixel_7_Pro has terminated.- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
관리자 기능에 대한 질문
안녕하세요 코드팩토리님. 해당 섹션과 상관이 없는 질문이지만, 강사님께서 앱을 개발하실 때 관리자 페이지(상품 수정, 문의 내역 열람 및 답변 등)를 어떻게 구현하시는지 궁금합니다. 제 생각에는 앱에 관리자 기능을 포함하는 경우, ROLE을 통해 사용자/관리자 여부 구분이 가능하더라도, 보안에 취약하고 코드가 늘어남에 따라 리소스양이 방대해져서 좋지 않을 것 같습니다. 그래서 앱에 포함되지 않는 관리자용 웹 페이지를 따로 만드는 것이 괜찮을 것 같은데, 강사님께서 어떻게 생각하시는지 궁금합니다. 강사님은 주로 어떠한 방식으로 구현하셨을까요?
-
미해결비개발자 4주만에 수익화 서비스 만들기: AI 바이브코딩 웹 + 앱 ALL IN ONE
카카오톡 로그인 연동이 잘 안되는것 같습니다
9강에서 카카오톡 로그인을 위한 세팅을 모두 다 했는데 계속해서 같은 오류가 납니다어떻게 해결해야할까요? api id.key, 리다리엑트 모두 적었습니다?
-
미해결비개발자 4주만에 수익화 서비스 만들기: AI 바이브코딩 웹 + 앱 ALL IN ONE
1주차 9강에 카카오톡 로그인서비스
카카오톡 > 카카오로그인> 보안'보안'탭이 보이지 않아요다른 곳 다 들어가봐도 못 찾겠습니다챗gpt는 이게 어떤 조건이 충족되야 자동생성된다는데 ui가 바뀐것 같은데 위치를 못 찾겠습니다
-
미해결[2025 리뉴얼]플러터플로우로 코딩 없이 한달 안에 앱 만들기
홈화면에서 계속 충돌이 발생해요
플러터플로우 관련 질문글을 자유롭게 작성해 주세요!문제가 발생하는 환경을 자세히 적어줄수록 좋아요나머지 화면들은 괜찮은데 홈화면에서만 계속 버벅거리는 현상이 발생해요....수업 그대로 따라 했는데 해결이 안되네요. 왜그럴까요?
-
미해결비개발자 4주만에 수익화 서비스 만들기: AI 바이브코딩 웹 + 앱 ALL IN ONE
lovable 슈퍼베이스 연결
결제하고 러너블에서 슈퍼베이스 연동을 할려했는데 connect supabase 이 버튼을 눌렀는데어딜봐도 슈퍼베이스란건 안적혀있는데 어떻게 연동하나요?
-
미해결[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
Column을 가로방향 최대 사이즈를 차지하도록 하는 방법에 관련
안녕하세요. Column의 가로방향 최대 사이즈를 차지하도록 만들때 2가지 방법을 섞어서 설명해주시는데요. 1) SizedBox로 Wrapping하기2) CrossAxisAlignment.stretch 속성 설정하기 이렇게 2가지로 만들 때, Widget properties로 확인해보면 Column 위젯의 width가 최대가 되기 때문에 차이가 없어 보이는데요. 어떤 방법을 언제 사용해야 되는지 규칙이 따로 있는 것인지 문의드립니다.
-
미해결[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
pubspec.yaml에서 font를 추가하면서 weight 값을 지정하는 것이 의미가 있는 것인지 문의
안녕하세요. 좋은 강의 만들어 주셔서 감사합니다. pubspec.yaml 에서 font를 추가하면서 weight 값도 추가해주는데요. 이 값일 빼거나, 다른 값으로 변경해서 테스트를 해도 변화가 없는것 같던데요. 그래서 의미가 없는 코드처럼 보여서요. 제가 맞게 파악하고 있는 것일까요? 아래 내용은 강사님께서 수업하시면서 말씀하신 내용을 주석으로 남겼던 부분입니다. # 패밀리는 폰트의 종류를 의미한다.(철자는 마음대로 지정해도 된다) fonts: - family: parisienne fonts: #fonts는 실제 적용될 폰트를 의미한다. - asset: asset/font/Parisienne-Regular.ttf #asset에 실제로 사용될 폰트를 선택해준다. - family: sunflower fonts: #Medium, Bold는 더 굵은것이라는 것을 구분하기 위해서 명시해줘야 한다. - asset: asset/font/Sunflower-Light.ttf - asset: asset/font/Sunflower-Medium.ttf weight: 700 # 숫자는 마음대로 넣을 수 있다. 코드에서 weight500를 사용하면 Medium 폰트를 사용할 것이라는 뜻이다. - asset: asset/font/Sunflower-Bold.ttf weight: 500 # 숫자는 마음대로 넣을 수 있다. 코드에서 weight500를 사용하면 Medium 폰트를 사용할 것이라는 뜻이다.
-
미해결[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
setState()를 호출하지 않으면 build가 실행 안되는 건가요?
안녕하세요. setState()를 실행하면, build()함수가 실행되는 것을 배웠는데요. build()가 처음 실행된 이후로, setState()를 명시적으로 호출하지 않는다면, build()함수가 실행되는 경우는 없는 것인가요? 즉, setState()를 개발자가 명시적으로 넣어주지 않았다면, 화면 갱신이 절대 발생 안되는 것인지가 궁금했습니다. 나중에 강의를 더 나가면 저절로 알게될지도 모르겠지만, 궁금해서 문의드립니다. 감사합니다.
-
해결됨Flutter 앱 개발 기초
user-not-found, wrong-password 코드가 더 이상 반환되지 않습니다
2023년 9월 15일 이후 프로젝트에서는 Email Enumeration Protection이 기본 활성화되어 user-not-found, wrong-password 코드가 더 이상 반환되지 않습니다 -> INVALID_LOGIN_CREDENTIALS 코드로 통합 try { await FirebaseAuth.instance.signInWithEmailAndPassword( email: email, password: password, ); onSuccess(); notifyListeners(); } on FirebaseAuthException catch (e) { if (e.code == 'INVALID_LOGIN_CREDENTIALS' || e.code.contains('invalid-credential') || e.code == 'wrong-password' || e.code == 'user-not-found') { onError('이메일 또는 비밀번호를 확인해주세요.'); } else if (e.code == 'invalid-email') { onError('이메일 형식을 확인해주세요.'); } else { onError(e.message!); } } catch (e) { onError('서버 오류가 발생하였습니다 $e.toString()'); }
-
해결됨Flutter 앱 개발 기초
SharedPreferences prefs 초기화 시기 문제
제 식대로 코드를 수정했습니다. MultiProvider로 CatService(prefs)를 호출하는 시기와 prefs를 초기화하는 시기가 비슷하여, 문제가 생겼습니다. "CatService 내부에서 async로 초기화하게 만들고생성자에서 바로 prefs를 쓰지 않도록 수정"하는 방식을 추천하는데 그게 맞을까요? 에러 메세지는 다음과 같습니다 [ERROR:flutter/runtime/dart_vm_initializer.cc(40)] Unhandled Exception: PlatformException(channel-error, Unable to establish connection on channel: "dev.flutter.pigeon.shared_preferences_android.SharedPreferencesApi.getAll"., null, null) 주요 코드import 'package:dio/dio.dart'; import 'package:flutter/material.dart'; import 'package:google_fonts/google_fonts.dart'; import 'package:provider/provider.dart'; import 'package:shared_preferences/shared_preferences.dart'; void main() async { WidgetsFlutterBinding.ensureInitialized(); SharedPreferences prefs = await SharedPreferences.getInstance(); runApp( MultiProvider( providers: [ ChangeNotifierProvider(create: (context) => CatService(prefs)), ], child: const MyApp(), ), ); } class MyApp extends StatelessWidget { const MyApp({super.key}); @override Widget build(BuildContext context) { return MaterialApp( home: HomePage(), theme: ThemeData(textTheme: GoogleFonts.getTextTheme('Sunflower')), ); } } class CatService extends ChangeNotifier { SharedPreferences prefs; List<String> catImages = []; List<String> favoriteImages = []; CatService(this.prefs) { getRandomCatImages(); favoriteImages = prefs.getStringList("favorites") ?? []; } void getRandomCatImages() async { Response result = await Dio().get( 'https://api.thecatapi.com/v1/images/search?limit=10&mime_types=jpg', ); for (var i = 0; i < result.data.length; i++) { catImages.add(result.data[i]["url"]); } notifyListeners(); } void toggleFavoriteImages(String image) { if (favoriteImages.contains(image)) { favoriteImages.remove(image); } else { favoriteImages.add(image); } prefs.setStringList("favorites", favoriteImages); notifyListeners(); } } <전체 코드>import 'package:dio/dio.dart'; import 'package:flutter/material.dart'; import 'package:google_fonts/google_fonts.dart'; import 'package:provider/provider.dart'; import 'package:shared_preferences/shared_preferences.dart'; void main() async { WidgetsFlutterBinding.ensureInitialized(); SharedPreferences prefs = await SharedPreferences.getInstance(); runApp( MultiProvider( providers: [ ChangeNotifierProvider(create: (context) => CatService(prefs)), ], child: const MyApp(), ), ); } class MyApp extends StatelessWidget { const MyApp({super.key}); @override Widget build(BuildContext context) { return MaterialApp( home: HomePage(), theme: ThemeData(textTheme: GoogleFonts.getTextTheme('Sunflower')), ); } } class CatService extends ChangeNotifier { SharedPreferences prefs; List<String> catImages = []; List<String> favoriteImages = []; CatService(this.prefs) { getRandomCatImages(); favoriteImages = prefs.getStringList("favorites") ?? []; } void getRandomCatImages() async { Response result = await Dio().get( 'https://api.thecatapi.com/v1/images/search?limit=10&mime_types=jpg', ); for (var i = 0; i < result.data.length; i++) { catImages.add(result.data[i]["url"]); } notifyListeners(); } void toggleFavoriteImages(String image) { if (favoriteImages.contains(image)) { favoriteImages.remove(image); } else { favoriteImages.add(image); } prefs.setStringList("favorites", favoriteImages); notifyListeners(); } } class HomePage extends StatefulWidget { const HomePage({super.key}); @override State<HomePage> createState() => _HomePageState(); } class _HomePageState extends State<HomePage> { @override Widget build(BuildContext context) { return Consumer<CatService>( builder: (context, catService, child) { return Scaffold( appBar: AppBar( backgroundColor: Colors.yellow, title: Center(child: Text("랜덤 고양이")), actions: [ IconButton( onPressed: () { Navigator.push( context, MaterialPageRoute(builder: (context) => FavoritePage()), ); }, icon: Icon(Icons.favorite, color: Colors.red), ), ], ), body: SafeArea( child: Container( color: Colors.brown.shade100, child: GridView.count( crossAxisCount: 2, mainAxisSpacing: 8, crossAxisSpacing: 8, padding: EdgeInsets.all(8), children: List.generate(catService.catImages.length, (index) { String catImage = catService.catImages[index]; return Stack( children: [ Positioned.fill( child: GestureDetector( onTap: () { catService.toggleFavoriteImages(catImage); }, child: Image.network(catImage, fit: BoxFit.cover), ), ), Positioned( right: 0, bottom: 0, child: Icon( Icons.favorite, size: 40, color: catService.favoriteImages.contains(catImage) ? Colors.pink.shade200 : Colors.transparent, ), ), ], ); }), ), ), ), ); }, ); } } class FavoritePage extends StatelessWidget { const FavoritePage({super.key}); @override Widget build(BuildContext context) { return Consumer<CatService>( builder: (context, catService, child) { return Scaffold( appBar: AppBar( backgroundColor: Colors.yellow, title: Center(child: Text("좋아")), ), body: SafeArea( child: GridView.count( crossAxisCount: 2, mainAxisSpacing: 8, crossAxisSpacing: 8, padding: EdgeInsets.all(8), children: List.generate(catService.favoriteImages.length, ( index, ) { String catImage = catService.favoriteImages[index]; return Stack( children: [ Positioned.fill( child: GestureDetector( onTap: () { catService.toggleFavoriteImages(catImage); }, child: Image.network(catImage, fit: BoxFit.cover), ), ), Positioned( right: 0, bottom: 0, child: Icon( Icons.favorite, size: 40, color: catService.favoriteImages.contains(catImage) ? Colors.pink.shade200 : Colors.transparent, ), ), ], ); }), ), ), ); }, ); } }
-
해결됨비개발자 4주만에 수익화 서비스 만들기: AI 바이브코딩 웹 + 앱 ALL IN ONE
download as zip 윈도우에서 어디있나요?
2-3강 듣는 중에 교재 위치 2-39) 이거 저만 안보이는 것일까요? 흑흑,, 윈도우 사용중인데 이게 어디있는지 모르겠습니다. 지피티한테 물어봐도 모르겠어서 질문드려요 현재 수강 진도를 함께 알려주세요! "1주차 3강까지 완료" 또는 "2주차 실습 중"처럼 어디까지 들으셨는지 적어주시면 맞춤형 답변을 드릴 수 있어요 📚구체적인 상황과 함께 질문해주세요! "AI가 안 된다"보다는 "Cursor에서 이런 프롬프트를 입력했는데 이런 에러가 나와요"처럼 상세하게 적어주시면 더 정확한 답변을 드릴 수 있어요 🎯스크린샷이나 코드를 첨부해주세요. 에러 화면, 현재 진행 상황을 보여주시면 문제 해결이 10배 빨라집니다! 마크다운 코드 블록(```)을 활용하면 더 깔끔하게 정리할 수 있어요 📸커뮤니티 검색을 먼저 해보세요. 같은 문제로 고민하신 분들이 이미 해결책을 찾았을 수도 있어요. 검색 후 못 찾으시면 언제든 새로 질문해주세요! 🔍서로 도우며 함께 성장해요. 나도 모르는 건 "저도 궁금해요!"라고 댓글 달아주시고, 아는 건 적극적으로 공유해주세요. 가르치면서 더 잘하게 됩니다 💪바이브코딩 관련 질문은 환영, 기술 세부사항은 GPT 활용! 프롬프트 작성법, AI 도구 사용법은 여기서, 복잡한 코딩 문법은 ChatGPT에게 물어보시는 게 더 빨라요 🤖진도나 과제 관련 문의는 1:1 문의를 이용해주세요. 개인적인 학습 계획, 환불, 수강 기간 연장 등은 따로 문의해주시면 더 자세히 상담드릴게요 📞실패 사례도 공유해주세요! "이렇게 했더니 망했어요" 같은 경험담도 다른 수강생들에게 큰 도움이 됩니다. 실패도 소중한 학습 자료예요 💡💬 좋은 질문 예시[진도] 2주차 5강 - React 컴포넌트 생성까지 완료[질문] Cursor에서 버튼 컴포넌트 생성 시 에러 발생상황: 2주차 실습 중 버튼 컴포넌트를 만들려고 하는데프롬프트: "빨간색 버튼 컴포넌트 만들어줘"에러 메시지: [스크린샷 첨부]시도해본 것: GPT에게도 물어봤는데 같은 에러 발생어떻게 해결하면 될까요?
-
미해결[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
video_call 플러그인 설치시 에러문제
위처럼 플러그인 설치후에 에러가 발생합니다. 도움부탁드립니다.