묻고 답해요
160만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨Flutter로 SNS 앱 만들기
섹션4 로그인 인증상태에 따라메인또는 로그인 화면으로 이동
8:54 WidgetsBinding.instance.addPersistentFrameCallback((_) { 사용하여 로그인화면에서 문제가 발생했어요. 에러는 없는데 화면이 떨려요..멜로 보내 드릴께요
-
미해결[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
Dart언어 함수형 프로그래밍 강의 중 fold함수에 대해 궁금한 점이 있습니다.
스트링 타입 리스트의 길이를 숫자로 반환할 때 .fold<int> 라고 지정을 해줘야 한다고 하셨는데 다트패드로 따라해 보니 타입을 작성하지 않아도 정상적으로 값이 반환되는데 이건 업데이트가 된건가여? 아래처럼 작성해도 정상적으로 console창에 값이 출력됩니다.
-
해결됨[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
response엔 값이있는데, response.data엔 값이안나와요
static Future<Map<String, dynamic>> fetchData() async { 생략// print("response: $response"); // 값나옴!! print("response.data: " + response.data);//값 안나옴!! return response.data; } 에서 response만 print했을땐 나오는데 response.data는 안나옵니다. 그래서 home_screen에서 log("error : ${snapshot.error.toString()}"); // error : type '_Map<String, dynamic>' is not a subtype of type 'String' 에러는 이렇게 나오구요 log(snapshot.data.toString()); //null이 나옵니다. 왜이럴까요??ㅜㅜ 강의에서 나오는 error 내용(String is not a subtype..)이랑 반대로나오네요 !
-
해결됨[2025 리뉴얼]플러터플로우로 코딩 없이 한달 안에 앱 만들기
댓글 구현하기에서 막힙니다.(설정 화면이 다르게 뜹니다.)
08:56에 뜨는 설정화면에는Available Options, Document Properties이렇게 2개만 뜨는데요. 지금은 구성 업뎃이 되었는지..Available Options, Document Properties, Available Options 이렇게 3개가 뜹니다. 해당 옵션을 눌러보면 아무것도 안나오고 그대로 컨펌 눌러보면 'Current variable is not valid' 라는 문구가 뜨면서 닫히지 않습니다. 제가 놓친게 있나 싶어서 3번은 넘게 돌려봤는데요. 그건 아닌거 같아요.
-
미해결[코드팩토리] [입문] Dart 언어 4시간만에 완전정복
쿠폰발급이 안되네요 ;;
별 5개 평점 남기고9363-87b86b17809c이 코드로 할인 받으려는데 되지않네요;;디스코드도 안됩니다
-
해결됨[Python 초보] Flutter로 만드는 ChatGPT 음성번역앱
휴대폰에서 동영상이 재생이 안됩니다 ㅠㅠ
안녕하세요 좋은 강의 감사합니다 한가지 아쉬운점이 발견되었습니다 안드로이드 폰으로 접속시 계속 로딩창만 뜨면서 재생이 안됩니다.3015 또는 3016 에러코드도 계속 보여주네요데스크톱 PC회면에서는 잘되네요 감사합니다 좋은 즐거운 주말 하루되셔요
-
해결됨Flutter로 SNS 앱 만들기
riverpod으로 상태관리하기
안녕하세요 선생님, 강의 흥미롭게 잘 듣고 있습니다.저는 Provider에 대한 지식이 없어 제가 알고있던 riverpod을 사용하여 프로젝트를 진행하고 있었습니다.그런데 이 강의의 update함수를 override하여 인증상태를 관리하는 부분에서 막혔습니다.riverpod의 StateNotifer에는 해당 기능이 없더라구요..(FirebaseAuth.instance.userChanges()에 따라서 state를 변경시키는 부분.)혹시 만약 riverpod을 사용한다면 어떤 방향으로 코딩을해야할까요? 답변주시면 감사하겠습니다!
-
해결됨Flutter로 SNS 앱 만들기
프로젝트 확장과 패키지 추가에 대하여 질문드립니다!
안녕하세요, 강의를 모두 수강하고 개인적으로 프로젝트를 더 확장해보고 싶어서, 개인 공부를 시작하게 되었습니다.그러다가 프로젝트에 외부 패키지를 추가해야 하는 경우가 생겼는데, 이 때 패키지 버전은 어떻게 지정해야 하는 지 궁금합니다.puspeck.yaml에서 예를 들면, 패키지 버전 앞에 붙이는 ^가 어느 정도 범위를 지정해줘서 해결하는 것으로 알고 있습니다.그렇다면,google_maps_flutter나 location 같은 외부 패키지를 추가 설치할 때, 버전을 어떻게 지정해야 충돌이 나지 않을까요?프로젝트가 코틀린 버전 1.7.10, gradle 버전 7.5 인것으로 아는데, 충돌 없이 더 최신 버전으로 변경 할 수 있을까요?왜냐하면 강의에서 제공하는 프로젝트에서 최신 버전의 google_maps_flutter와 location 패키지를 설치하고, 사용하려고 하니 아래와 같은 에러가 발생했습니다.그래서, 코틀린 버전을 1.9로 올리고, 그에 맞게 gradle 버전을 수정한 다음, 기존 파일을 지운 다음에, Sync를 맞추니까 Module was compiled with an incompatible version of Kotlin. The binary version of its metadata is 1.9.0, expected version is 1.7.10 같은 에러가 발생합니다. 그래서 인터넷에서 찾아보니, 저장되어 있는 캐시 때문에 아직 1.7.10 버전으로 인식한다고 해서, .gradle 파일이랑 이것저것 삭제하고 다시 빌드했는데도, 변경된 코틀린 버전을 인식을 못하고 계속 무한루프에 빠지는 등 상황 해결이 되지 않았습니다. 어떻게 해야 할까요? 추가 설치하고 싶은 외부 패키지를 일일히 버전을 낮춰야 하나요? 아니면, 안드로이드로 컴파일하는 코틀린 버전을 상승시킬 수 있는 방법은 없는걸까요?
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
redirect와 refresh 질문드려요
안녕하세요 선생님 ^^강의 듣고 있는중에 궁금한 것이 생겼습니다 1)gorouter 7버전에서듣고(4버전 건너뛰고) -> 프로젝트에 적용하기 단원보고 있는데요 갑자기 refresh라는 개념이 나와서요 7버전에서는 없었는데 .... refresh라는 기능 없이도 충분히 만들수 있나요?아니면 7버전에서 refresh비슷한 기능이 있나요?? 2)redirect를 통해 이동한 페이지는 Appbar에서 뒤로가기가 없던데 이것이 redirect 특징인 건가요? 3)redirect를 사용해서 뒤로가기버튼이 없는 상태에, 만약에 context.pop을 하게 된다면 어디로 이동하게 되나요?
-
미해결처음하는 플러터(Flutter) 기초부터 실전까지 [풀스택 Part4] (쉽고 견고하게 단계별로 다양한 프로젝트까지)
강의 질문입니다.
Flutter와 Firebase/Firestore 까지 활용한 그럴듯한 서비스 만들어보기 6까지 실습해봤는데요.TextButton >> addEntryWithAutoGeneratedId를 통해서Task를 추가하면 id가 ''로 해서 나오는 것을 Firebase 사이트를 통해서 확인을 했고UpdateEntryWithId에 의해서 수정을 하게 되면 그때는 id가 등록된 것이 Firebase에서 확인을 했습니다.Add를 할때는 id가 ''으로 저장되는게 맞나요? 제가 코드를 잘못 따라한건지 궁금합니다.
-
미해결[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
WebView Url 호출안되시는 분들은
import 'package:flutter/material.dart'; import 'package:webview_flutter/webview_flutter.dart'; class HomeScreen extends StatelessWidget { final homeUrl = Uri.parse('https://blog.codefactory.ai'); final WebViewController controller = WebViewController(); HomeScreen({super.key}) { controller.loadRequest(Uri.parse('https://blog.codefactory.ai')); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text('Blug App Bar'), centerTitle: true, backgroundColor: Colors.orange, ), body: WebViewWidget( controller: controller, ), ); } }이렇게하시면 됩니당
-
해결됨Flutter 앱 개발 기초
수강 기간이 존재하는데...
제가 이거 수강기간이 존재하는 것을 모르고 구매하고지금 아직 듣지 못한 상태인데 2개월이 남았더라구요. 수강기간이 끝나면 이 강좌는 닫히고 들으려면 재구매를 해야되는건가요??제 다른 구매 강좌들은 다 수강기간이 무제한이어서 제대로 안보고 구매했네요
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
에러가 생겨서 질문드립니다
에러 내용W/WindowOnBackDispatcher(25534): OnBackInvokedCallback is not enabled for the application.W/WindowOnBackDispatcher(25534): Set 'android:enableOnBackInvokedCallback="true"' in the application manifest. 증상:실행시키면 녹색바탕에 codefactory 로고 와 인디케이터 화면이 나오면서 무지 오래 20분 이상 계속 되다가 로그인 화면으로 들어가네요로그인 화면으로 바로 들어가야 하는데요. 그게 안되고 있습니다.로그인 화면으로 들어갈 때 첨부한 사진 하단 2줄 메세지가 나오네요 (에러 내용 참조) 검색하면 증상 대처법이 나오는데 따라해도 똑같습니다.설정 어디를 바꾸면 될거도 같은데 찾지 못하고 있습니다.
-
미해결[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
영상통화 user가 2명이상일때 함수 적용 방법
안녕하세요! 아고라 모바일 + 웹 데모에서 실행을 했을 때, 3명이 들어왔다고 하면 mute 함수들을 써주려면, 어떤식으로 코드를 작동하면 3명이 전부 mute함수를 가질 수 있을까요? 현재 강의는 enableVideo라는 함수로 모바일 + 웹데모 참여자가 두명다 enable 이 되는 것 같은데... 저희 프런트 코드에서 3명에게 모두 mute버튼과 함수를 부여해주려면 어떤식으로 보통 설계가 들어가는지 궁금합니다.
-
미해결[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
이렇게 사용하면 안되나요 ?
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.코드팩토리 디스코드https://bit.ly/3HzRzUMFlutter 강의를 구매하시면 코드팩토리 디스코드 서버 플러터 프리미엄 채널에 들어오실 수 있습니다! 디스코드 서버에 들어오시고 저에게 메세지로 강의를 구매하신 이메일을 보내주시면 프리미엄 채널에 등록해드려요! 프리미엄 채널에 들어오시면 모든 질의응답 최우선으로 답변해드립니다! 3:40 초쯤에 11시라 써진 텍스트 위젯, 이미지 위젯, 보통 이라 써진 텍스트 위젯을 하나 하나 expanded 위젯으로 감싸서 서로 차지하는 공간을 가로로 균등하게 만들어 주고있는데요 그냥 row위젯에 mainAxisAlignment: MainAxisAlignment.spaceBetween, 추가하면 원하는 결과랑 똑같이 나오는거 같은데 이렇게 사용하면 안될까요?? 나중에 다른 작업때문에 저렇게 하는건지 궁금합니다 !! 이게 제가 말하는 방식입니다!!
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
BottomNavigationBar 질문
검색 방법이 잘못된건지 모르지만 구글에 검색해도 해결법이 나오지않아 질문 올립니다. bottomNavagtionBar: GestureDetector( onTap: (){ Navigator.push(context, MaterialPageRoute(builder: (context) => CommentRegisterScreen( id: widget.id))); }, child: TRoundedContainer( height: 60, backgroundColor: const Color(0xffF8F8FA), padding: const EdgeInsets.all(TSizes.defalutSpace), radius: 0, child: Text( '댓글을 남겨보세요.', style: Theme.of(context).textTheme.bodyMedium!.copyWith(color: Colors.grey), ), ), ), child: SingleChildScrollView( child: Padding( padding: const EdgeInsets.all(TSizes.defalutSpace), child: Column( children: [ const SizedBox(height: TSizes.spaceBtwItems), SizedBox( height: MediaQuery.of(context).size.height, child: Column( mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start, children: [ Expanded( child: PaginationListViewV2( model: state, id: widget.id, provider: commentProvider(widget.id), itemBuilder: <Comment>(_,index,comment){ if(index == 0){ return Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ /// 제목 Text(state.title, style: Theme.of(context).textTheme.headlineMedium), const SizedBox(height: TSizes.spaceBtwItems), /// 닉네임 Row( crossAxisAlignment: CrossAxisAlignment.center, children: [ const TRoundedImage( width: 24, height: 24, fit: BoxFit.fill, imageUrl: 'asset/img/no_image.png', borderRadius: 100, ), const SizedBox(width: TSizes.sm), Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( state.creator, style: Theme.of(context).textTheme.bodyLarge, ), ], ), ], ), const SizedBox(height: TSizes.spaceBtwItems), /// 날짜, 좋아요 Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text( state.createDate.split("T")[0], style: Theme.of(context).textTheme.bodyMedium!.copyWith(color: Colors.grey), ), GestureDetector( onTap: button.disable==false ? () async { //버튼 비활성화 await button.change(); await check == -1 ? ref.read(communityProvider.notifier).clickFavorite(widget.id) : ref.read(communityProvider.notifier).downFavorite(widget.id); await ref.read(favoriteProvider.notifier).updateFavorites(widget.id); //버튼 활성화 await button.change(); } : null, child: check == -1 ? TRoundedContainer( showBorder: true, padding: const EdgeInsets.all(TSizes.sm), borderColor: Colors.redAccent, radius: 10, child: Row( crossAxisAlignment: CrossAxisAlignment.center, children: [ Text( '좋아요', style: Theme.of(context).textTheme.labelMedium!.copyWith(color: Colors.redAccent), ), const SizedBox(width: TSizes.xs), Text( state.favorite.toString(), style: Theme.of(context).textTheme.labelMedium!.copyWith(color: Colors.redAccent), ), ], ), ) : TRoundedContainer( padding: const EdgeInsets.all(TSizes.sm), backgroundColor: Colors.redAccent, radius: 10, child: Row( crossAxisAlignment: CrossAxisAlignment.center, children: [ child: SizedBox( height: 120, child: ListView.separated( shrinkWrap: true, scrollDirection: Axis.horizontal, itemCount: imgs.length, separatorBuilder: (_, __) { return const SizedBox(width: TSizes.spaceBtwItems / 2); }, itemBuilder: (_, int index) { return TRoundedImage( imageUrl: imgs[index].toString().trim(), width: 120, height: 120, fit: BoxFit.fill, borderRadius: 12.0, isNetworkImage: true, ); }, ), ), ), ], ) : const SizedBox(), const SizedBox(height: TSizes.spaceBtwSections), /// 글 내용 Text( state.content.trim(), style: Theme.of(context).textTheme.bodyMedium!.copyWith(height: 1.5), ), /// 댓글 0이 아닐 경우 Row( children: [ Text('댓글', style: Theme.of(context).textTheme.bodySmall), const SizedBox(width: TSizes.spaceBtwItems / 2), Text(state.commentCnt.toString(), style: Theme.of(context).textTheme.bodySmall), ], ), const SizedBox(height: TSizes.spaceBtwItems), CommentCard( comment:comment, recomments:comment.commentList, board_id: widget.id ) ], ); } return CommentCard( comment:comment, recomments:comment.commentList, board_id: widget.id ); }), ), Container( height: 210 ) ] ), ), // Center(child: Text('첫 댓글을 남겨주세요.', style: Theme.of(context).textTheme.bodySmall)), ], ), ), ),위 코드와 같이 BottomNavigationBar와 SinglechildScrollView를 같이 사용하고 있습니다. 가장 하단의Container( height: 210 )위 코드를 넣어주지 않을 시 화면 스크롤이 모두 안되고 짤리는 현상이 발생합니다. 혹시 이러한 경험이 있어 해결방법이 있다면 알려주시면 감사하겠습니다.
-
해결됨[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
플러터 내 생성 시 file / directory의 차이
플러터 내 생성 시 file / directory의 차이가 궁금합니다. 어떨 때는 New에서 file을 생성하고 어떨 때는 directory를 생성해서요~
-
미해결[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
toolchanin 에러가 발생합니다.
Android toolchain - develop for Android devices X Unable to locate Android SDK. Install Android Studio from: https://developer.android.com/studio/index.html On first launch it will assist you in installing the Android SDK components. (or visit https://flutter.dev/docs/get-started/install/windows#android-setup for detailed instructions). If the Android SDK has been installed to a custom location, please use flutter config --android-sdk to update to that location. Android SDK is up to date.Running Android Emulator hypervisor driver installer[SC] ControlService 실패 1062:서비스가 시작되지 않았습니다.[SC] DeleteService 성공[SC] 4294967201 오류가 발생하여 StartService이(가) 실패했습니다.Done 이런 오류는 어떻게 해결하나요?
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
다시 getDetail호출?
제 생각이 조금이라도 이상한 곳이 있다면 말씀해주세요 ~! ㅎㅎ첫번째 질문은 , detail_screen.dart에서initState에 ref.read(restaurantProvider.notifier).getDetail(id: widget.id); 만 사용하였는데만약 restaurantDetailModel이 이미 있는 id를 또 getDetail한 거였다면, 다시 getDatil을 호출할 필요가 없으므로이떄 initState에 ref.read(restaurantDetailProvider) is restaurantDetailModel 라면 getDatil을 호출하지 않겠다를추가로 넣으면 좋겠다 생각하는데 제 생각이 어떠한가요?? 두번째 질문은 restaurant > provider > restaurant_provider.dart 에서 네트워크 요청을 하다가 등등 에러가 날수 있을 거 같은데 여기는 catch 로 잡아서 state를 왜 error로 만들지 않았나 궁금합니다..!
-
미해결[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
initState -> didChangeDependencies -> dirty -> build -> clean 라이프사이클 강의를 보고 궁금한건데
내용은 전반적으로 이해가 됩니다.질문내용은 print로 찍어봐서 라이프사이클은 initState -> build -> initState타이머만 작동하는거를 알 수 있었는데initState에서 build로 갔으면 타이머가 작동을 어떻게 하나요?initState에서 build로 가고 clean 후 deactivate로 안가고 initState 타이머로 가는 원리가 궁금합니다.제가 머릿속으로 생각해봤을때는 initState 시작 후 마치 반복문 무한루프처럼 build로 갈 수 없고 계속 타이머 돌아가지 않나 싶어서요