묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결처음하는 플러터(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로 갈 수 없고 계속 타이머 돌아가지 않나 싶어서요
-
미해결[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
섹션22 동영상플레이어에서 로고 클릭시 오류 발생합니다.
IOS 시뮬레이터 사용하여 로고 클릭시Lost connection to device.Error: Unable to terminate com.example.vidPlayer on 6913EF1F-C2DE-4C17-A1F2-7948E943B273:ProcessException: Process exited abnormally with exit code 3:An error was encountered processing the command (domain=NSPOSIXErrorDomain, code=3):Simulator device failed to terminate com.example.vidPlayer.found nothing to terminateUnderlying error (domain=NSPOSIXErrorDomain, code=3): The request to terminate "com.example.vidPlayer" failed. found nothing to terminate found nothing to terminate Command: /usr/bin/arch -arm64e xcrun simctl terminate 6913EF1F-C2DE-4C17-A1F2-7948E943B273 com.example.vidPlayerthe Dart compiler exited unexpectedly. 오류가 뜨면서 어플 밖으로 나가버리네요. 해결방법 알 수 있을까요?
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
데이터가 List형태일때 질문해 봅니다.
안녕하세요. 제가 질문을 잘못했던거 같습니다.데이터가 Map형태가 아니고 List형태일때 CursorPagination을 사용할 수 있나요?목적은 CursorPaginationBase를 extends 하고 싶어서 입니다. 된다면 CursorPagination을 어떻게 구성해야 하는지 힌트를 좀 주실 수 있을까요?아니면 보통 데이터를 Map 형태로 고쳐서 사용하나요?아니면 제가 잘못이해한걸까요?데이터가 meta나 data안에 있어야 하는게 Map형태라고 생각했는데 그게 아니고List형태도 key와 value로 나누면 Map형태가 되는건가요?
-
미해결[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
세션 29 isar database open error
안녕하세요.Unique Constraint 테스트하기 강의에서 izar database를 main 함수 내에서 여는 코드에서 에러가 나서 진행이 되지 않고 있습니다,, main.dartimport 'package:dusty_dust/model/stat_model.dart'; import 'package:dusty_dust/screen/home_screen.dart'; import 'package:flutter/material.dart'; import 'package:isar/isar.dart'; import 'package:path_provider/path_provider.dart'; void main() async { //main 함수에서 runApp말고 다른 거 실행하려면 이걸 적어줘야함. WidgetsFlutterBinding.ensureInitialized(); final dir = await getApplicationDocumentsDirectory(); final isar = await Isar.open( [StatModelSchema], directory: dir.path, ); runApp( MaterialApp( theme: ThemeData( fontFamily: 'sunflower' ), home: HomeScreen(), )); } pubspec.yamlcupertino_icons: ^1.0.2 dio: ^5.4.3+1 isar: ^3.1.0+1 isar_flutter_libs: ^3.1.0+1 path_provider: ^2.1.2 isar_generator: ^3.1.0+1 Error MessageE/flutter ( 364): [ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: MissingPluginException(No implementation found for method getApplicationDocumentsDirectory on channel plugins.flutter.io/path_provider)E/flutter ( 364): #0 MethodChannel._invokeMethod (package:flutter/src/services/platform_channel.dart:332:7)E/flutter ( 364): <asynchronous suspension>E/flutter ( 364): #1 getApplicationDocumentsDirectory (package:path_provider/path_provider.dart:121:24)E/flutter ( 364): <asynchronous suspension>E/flutter ( 364): #2 main (package:dusty_dust/main.dart:11:15)E/flutter ( 364): <asynchronous suspension>E/flutter ( 364):
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
스크롤의 maxScrollExtent 관련 문의
안녕하세요 저도 완성된 pagination 로직 실행해보기 강의에서 스크롤 리스너의 if문 조건이 적용되지 않아서 문의 드립니다. 저는 구현된 코드를 확인했을때 maxScrollExtent 값이 엄청 크게 나옵니다.그래서 같은 리스트를 세번 정도는 반복 스크롤을 해야 컨트롤러의 offset이 maxScrollExtent와 동일해집니다. 최초 리스너 동작 시 scroll 위치 : 6.6650390625maxScrollExtent : 7485.526283048211 확인해본 사항은 아래와 같습니다. item 중복 저장 여부 : 최초 로딩 후 데이터 사이즈를 확인했을때도 사이즈는 20개 입니다. 리스트뷰 구현 오류인지 확인 : 컨트롤러를 빼고 테스트하면, 20개 크기 그대로 리스트뷰가 생성됩니다. 사이즈가 안먹히는 것 같아서 픽셀 위치 대신 데이터 갯수를 index로 관리해서 해보려고 했는데, 정확히 맞는 방법인지도 모르겠어서 문의드립니다. T_T...어딘가 단단히 잘못된 것 같은데 모르겠습니다...
-
해결됨[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
dio요청시 에러 상태코드임에도 onError가 아닌 onReponse에서 응답
flutter: [REQ] [METHOD] GET [ENDPOINT] http://localhost:8080/api/user/info flutter: [RES] [METHOD] GET [ENDPOINT] http://localhost:8080/api/user/info [STATUS CODE] 401현재 제가 진행 중인 프로젝트에서 401 코드임에도 불구하고 onError가 아닌 onReponse로 넘어갑니다. 액세스 토큰 재발급 과정을 onResponse에서 진행해도 되는걸까요? throw new InvalidVerificationCodeException(ErrorCode.INVALID_CODE); }백엔드에서 이렇게 에러를 내주는 onResponse로 넘어오네요..
-
미해결[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
widget.color 가 헷갈립니다.
안녕하세요! widget.color가 동작 방식이 이해가 가질 않습니다. ㅜ stateful 클래스와 state 클래스를 바인딩 시켜주면 widget.color의 state클래스에서 widget은 stateful클래스를 참조한다고 생각하면 될까요?
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
checkToken 함수 read 에러 관련 질문
안녕하세요.iOS 시뮬레이터로 개발중입니다.checkToken 함수 실행 시 Unhandled Exception: PlatformException(Unexpected security result code, Code: -25300, Message: The specified item could not be found in the keychain., -25300, null) 에러가 발생하여 질문드립니다. 값이 없을 경우 nullable string이 나와야 하는데 exception이 나오는 이유가 궁금해요. 혹시 몰라서 write를 먼저 하고 read를 했더니 값이 잘 불러와집니다.
-
미해결[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
PageController 를 statelesswidget 에서 사용하면
해당 pageview를 stateful에서 구현하라고 힌트 주셨는데 .controller와 timer를 @dispose 처리해야해서 인가요? 일단 성미가 급해서 힌트 안듣고 ㅋㅋ stateless에서 구현하고 나니 ful로 하라시길래 "아 이유를 설명해주시겠지" 했는데 잘 이해를 못했어요 ㅠㅠ
-
해결됨Flutter로 SNS 앱 만들기
섹션 2 회원가입화면
예상하지 않게 안드로이드와 플러터 업 하면서 에러로 인하여 섹션 2에 이름,패스원드 확인 검징로직작성편을 다시 보고 있습니다.그런데, 검증로직에서 에러 부분에 색상이 흰색으로 나와요.강의화면처럼 빨강색으로 나오고 싶은데 어떻게 하면 됩니까validator: (value) {if (value == null ||value.trim().isEmpty ||!isEmail(value.trim())) {return '이메일을 입력해주세요';