묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨[플러터 상태관리] Bloc 마스터 코스 기초부터 응용까지!
안드로이드 스튜디오 에뮬레이터 권장사양
안드로이드 스튜디오에서 코딩하는 것까지는괜찮은데,에뮬레이터로 실행해서 화면 띄우는 거까지 보려면속도가 너무 느립니다.에러가 있을 경우에는 더 답답하고요.일반적인 사무, 인터넷용으로는 답답함을 전혀못 느꼈는데, 유독 코딩할 때만 너무 느리네요컴퓨터를 새걸로 바꿔야 하나 싶기도 한데,안드로이드 스튜디오 에뮬레이터를 원활히돌리려면 컴퓨터 사양이 어느 정도 되면 될까요?(gpu도 좋은게 있어야 할까요? 제가 게임은 별로 안해서요..)참고로 현재 컴퓨터 사양은cpu: amd 3300ram: 8기가ssd: 500gbgpu: 메인보드 내장형 입니다.
-
해결됨[코드팩토리] [입문] Dart 언어 4시간만에 완전정복
안드로이드 스튜디오 에뮬레이터 권장사양
안드로이드 스튜디오에서 코딩하는 것까지는괜찮은데,에뮬레이터로 실행해서 화면 띄우는 거까지 보려면속도가 너무 느립니다.에러가 있을 경우에는 더 답답하고요.일반적인 사무, 인터넷용으로는 답답함을 전혀못 느꼈는데, 유독 코딩할 때만 너무 느리네요컴퓨터를 새걸로 바꿔야 하나 싶기도 한데,안드로이드 스튜디오 에뮬레이터를 원활히돌리려면 컴퓨터 사양이 어느 정도 되면 될까요?(gpu도 좋은게 있어야 할까요? 제가 게임은 별로 안해서요..) 참고로 현재 컴퓨터 사양은cpu: amd 3300ram: 8기가ssd: 500gbgpu: 메인보드 내장형 입니다.
-
미해결[2024 최신] [코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
공공Api 버전업데이트로 인한 항목변경문제
공공 API서비스가 7월20일 부로 업데이트가 된 것 같습니다.API 자체가 여러개로 분열 되고요청메세지 명세의 항목 값들이 전부 바꼈네요일단 변경된 api에 맞는 키만 입력해서 강의를 따라가보겠지만 잘 될진 모르겠습니다.;;
-
해결됨[Bloc 응용] 실전 앱 만들기 (책 리뷰 앱) : SNS 로그인, Firebase 적용, Bloc 상태 관리, GoRouter
로딩중
안녕하세요 개남님 https://github.com/Bamschool/book_review 지금 '스플레시 완료' 방금 깃커밋을 했습니다. 그런데 이부분에서 왜 작동을 안 하는지 잘 모르겠습니다.. 분명 로그인체크로 바뀌어야하는데 데이터로드에서 바뀌지 않습니다. 강의를 다시 봤는데 도저히 문제는 모르겠습니다. 이유가뭘까요? 감사합니다! auth_check('로그인 체크'); const SplashPage({Key? key}) : super(key: key); @override Widget build(BuildContext context) { return BlocListener<AppDataLoadCubit, AppDataLoadState>( listenWhen: (previous, current) => current.status == CommonStateStatus.loaded, listener: (context, state) { context.read<SplashCubit>().changeLoadStatus(LoadStatus.auth_check); }, child: Scaffold( body: Stack( fit: StackFit.expand,
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
Restaurant Pagination의 provider 로직관련입니다.
안녕하세요 상태관리 프로젝트에 적용하기 부분이 많이 어렵네요 여러번 강의를 보고 restaurant_provider.dart의 코드를 보며 이해를 하려 했는데 제가 이해를 한것이 맞는지 몰라 이곳에 질문을 남기게 되었습니다. CursorPagination의 상태 관련 5개중 아래 두가지 상태를 제가 이해한게 맞나요??두가지 모두 로딩중인데 아래 상황에서 로딩중CursorPaginationRefetching: 데이터를 받아온 상태에서 다시 새로고침을 하여 로딩 중 CursorPaginationFetchMore: 데이터를 받아온 상태에서 새로운 데이터를 추가 하는 중 바로 반환하는 상황바로 반환하는 상황이라는 것이 데이터를 받아 오는 중, 즉 로딩중 일때나 더이상 추가 데이터가 없을 때paginate() 함수 바로 빠져 나와야 한다는 뜻인가요??그리고 fetchMore가 아닐때 - 새로고침의 의도가 있을 수 있다. fetchMore가 아닐때라고 주석을 달아 주셨는데 이것은 false일때라는 뜻인가요?? 그럼 감사합니다 .
-
해결됨[Bloc 응용] 실전 앱 만들기 (책 리뷰 앱) : SNS 로그인, Firebase 적용, Bloc 상태 관리, GoRouter
json
안녕하세요 개남님(base) choejonghwan@choejonghwan-ui-MacBookPro review_book % flutter pub run build_runner watch 이거 하고나서부터 [INFO] Generating build script completed, took 149ms[INFO] Setting up file watchers completed, took 4ms[INFO] Waiting for all file watchers to be ready completed, took 201ms[INFO] Reading cached asset graph completed, took 34ms[INFO] Checking for updates since last build completed, took 470ms[INFO] Running build completed, took 6ms[INFO] Caching finalized dependency graph completed, took 20ms[INFO] Succeeded after 28ms with 0 outputs (0 actions) 여기까진 왔는데 멈추네요 여기서... part 'naver_book_search_option.g.dart'; 가 뜨지도않고.. 사진 두개첨부합니다. 감사합니다.
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
텍스트필드 디자인하기 강의 중 변수선언 질문
final baseBorder = const OutlineInputBorder( borderSide: BorderSide( color: INPUT_BORDER_COLOR, ), );이 코드를 CustomTextFormField 클래스의 필드로 넣지 않고 build 메서드 안에 작성하신 이유가 따로 있을까요?이렇게 작성하면 렌더링될때마다 baseBorder가 만들어져야하니 메모리관리면에서 손해인거 아닌가 싶어서요!
-
미해결[2024 최신] [코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
스케쥴컴패니언 실행 시 에러
스케쥴 저장 강의에서 5분 48초 처럼 코드 작성 후 실행시켰는데 다음과 같은 에러가 납니다. id값이 없다고 하는 것 같은데 intcolumn에서 autoIncrement를 추가해주면 따로 설정할 필요가 없다고 들었는데, 어디서부터 잘못된걸까요?
-
미해결[Bloc 응용] 실전 앱 만들기 (책 리뷰 앱) : SNS 로그인, Firebase 적용, Bloc 상태 관리, GoRouter
키 저장소 파일이 존재하지 않습니다.
SHA 인증서 받아오려 하는데 키 저장소가 존재하지 않는다고 하네요.어떻게 해야 하나요?
-
해결됨Flutter 앱 개발 기초
프로젝트를 생성했는데 안드로이드 파일에 오류표시가 생깁니다
프로젝트를 생성하고 첫 실행을 했는데 아래와 같은 오류가 발생했습니다.C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Microsoft\VC\v170\Microsoft.CppCommon.targets(247,5): error MSB8066: 'C:\Users\tnqls\OneDrive\���� ȭ��\ff\hello_f\build\windows\CMakeFiles\17bcc7b3690274761bc31777eb11dab3\flutter_windows.dll.rule;C:\Users\tnqls\OneDrive\���� ȭ��\ff\hello_f\build\windows\CMakeFiles\e86d85ec92b8cca453a41bad4e8ed811\flutter_assemble.rule;C:\Users\tnqls\OneDrive\���� ȭ��\ff\hello_f\windows\flutter\CMakeLists.txt'�� ���� ����� ���� ���尡 ����Ǿ����ϴ�(�ڵ� 1). [C:\Users\tnqls\OneDrive\���� ȭ��\ff\hello_f\build\windows\flutter\flutter_assemble.vcxproj]Exception: Build process failed.이후 프로젝트의 안드로이드 파일에 에러표시가 떠 cmd에 flutter doctor를 실행한 결과Doctor summary (to see all details, run flutter doctor -v):[√] Flutter (Channel stable, 3.10.6, on Microsoft Windows [Version 10.0.22621.1992], locale ko-KR)[√] Windows Version (Installed version of Windows is version 10 or higher)[!] Android toolchain - develop for Android devices (Android SDK version 34.0.0) X cmdline-tools component is missing Run path/to/sdkmanager --install "cmdline-tools;latest" See https://developer.android.com/studio/command-line for more details. X Android license status unknown. Run flutter doctor --android-licenses to accept the SDK licenses. See https://flutter.dev/docs/get-started/install/windows#android-setup for more details.[√] Chrome - develop for the web[√] Visual Studio - develop for Windows (Visual Studio Community 2022 17.5.4)[√] Android Studio (version 2022.2)[√] VS Code (version 1.80.1)[√] Connected device (3 available)[√] Network resources! Doctor found issues in 1 category.하나의 오류가 있는듯 한데 현재 안드로이드 스튜디오로 다른 앱 개발 활동을 하고있는것이 혹시 연관이 있을까요? 해결방안을 모르겠어서 질문 남깁니다.도와주세요..
-
미해결[2024 최신] [코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
webview(webpage not available)
코드팩토리 디스코드https://bit.ly/3HzRzUMFlutter 강의를 구매하시면 코드팩토리 디스코드 서버 플러터 프리미엄 채널에 들어오실 수 있습니다! 디스코드 서버에 들어오시고 저에게 메세지로 강의를 구매하신 이메일을 보내주시면 프리미엄 채널에 등록해드려요! 프리미엄 채널에 들어오시면 모든 질의응답 최우선으로 답변해드립니다!
-
미해결[2024 최신] [코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
섹션7 StatefulWidget 강의자료는 어디서 받나요?
제목 그대로 입니다.강의한 내용을 올려놓는다고 했는데, 어디 있는지 못 찾겠습니다.
-
미해결[2024 최신] [코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
웹뷰에 링크를 못 불러옵니다
앱 실행은 되는데 웹 링크를 못 엽니다ㅠㅠ확인 부탁드립니다 !//오류 내용I/X509Util( 5126): Failed to validate the certificate chain, error: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found. E/chromium( 5126): [ERROR:ssl_client_socket_impl.cc(946)] handshake failed; returned -1, SSL error code 1, net_error -202//작성한 코드import 'package:flutter/material.dart'; import 'package:hello_world/screen/home_screen.dart'; void main() { // Flutter 프레임워크가 // 앱을 실행할 준비가 될 때까지 기다린다. WidgetsFlutterBinding.ensureInitialized(); runApp( MaterialApp( home: HomeScreen(), ), ); } import 'package:flutter/material.dart'; import 'package:webview_flutter/webview_flutter.dart'; final homeUrl = Uri.parse('https://blog.codefactory.ai'); // ignore: must_be_immutable class HomeScreen extends StatelessWidget { WebViewController controller = WebViewController() ..setJavaScriptMode(JavaScriptMode.unrestricted) ..loadRequest(homeUrl); HomeScreen({super.key}); @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( backgroundColor: Colors.orange, title: const Text('yoonjoo'), actions: [ IconButton( onPressed: () { controller.loadRequest(homeUrl); }, // ignore: prefer_const_constructors icon: Icon( Icons.home, ), ), ], ), body: WebViewWidget( controller: controller, ), ); } }
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
gorouter 7 버전 상세화면 이동 오류
안녕하세요강의 실습 중 오류가 발생해서 도움을 요청드립니다현재 개발 중인 환경은 윈도우에서 안드로이드 시뮬레이터로 진행 중이며 IDE 는 인텔리제이를 사용하고 있고 gorouter 7.0.1 버전을 사용해서 실습을 하고 있습니다GoRouter 설정 부분은 7.0.1 버전 실습 강좌를 참고해서 변경했고 정상적으로 로그인 및 스플래시 스크린까지 동작을 했습니다.레스토랑 리스트에서 레스토랑 상세화면으로 이동하는 부분을 실습 중 오류가 발생합니다첫번째. context에서 gorouter 관련 메소드가 자동완성이 안되며 실제로 동작도 하지 않습니다.두번째. context.named() ,context.go() 둘 다 아래와 같은 오류가 나타납니다 레스토랑 스크린import 'package:actual/common/component/pagination_list_view.dart'; import 'package:actual/restaurant/component/restaurant_card.dart'; import 'package:actual/restaurant/provider/restaurant_provider.dart'; import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; // 미사로 나옵니다 class RestaurantScreen extends StatelessWidget { const RestaurantScreen({Key? key}) : super(key: key); @override Widget build(BuildContext context) { return PaginationListView( provider: restaurantProvider, itemBuilder: <RestaurantModel>(context, index, model) { return GestureDetector( onTap: () { context.go("/restaurant/${model.id}"); }, child: RestaurantCard.fromModel(model: model), ); }, ); } } 레스토랑 디테일 스크린import 'package:actual/common/layout/default_layout.dart'; import 'package:actual/common/model/cursor_pagination_model.dart'; import 'package:actual/common/utils/pagination_utils.dart'; import 'package:actual/product/componet/product_card.dart'; import 'package:actual/rating/component/rating_card.dart'; import 'package:actual/rating/model/rating_model.dart'; import 'package:actual/restaurant/component/restaurant_card.dart'; import 'package:actual/restaurant/model/restaurant_detail_model.dart'; import 'package:actual/restaurant/model/restaurant_model.dart'; import 'package:actual/restaurant/provider/restaurant_provider.dart'; import 'package:actual/restaurant/provider/restaurant_rating_provider.dart'; import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:skeletons/skeletons.dart'; class RestaurantDetailScreen extends ConsumerStatefulWidget { static String get routeName => "restaurantDetail"; final String id; const RestaurantDetailScreen({required this.id, Key? key}) : super(key: key); @override ConsumerState<RestaurantDetailScreen> createState() => _RestaurantDetailScreenState(); } class _RestaurantDetailScreenState extends ConsumerState<RestaurantDetailScreen> { final ScrollController controller = ScrollController(); @override void initState() { super.initState(); ref.read(restaurantProvider.notifier).getDetail(id: widget.id); controller.addListener(listener); } void listener(){ PaginationUtils.paginate(controller: controller, provider: ref.read(restaurantRatingProvider(widget.id).notifier)); } @override Widget build(BuildContext context) { final state = ref.watch(restaurantDetailProvider(widget.id)); final ratingsState = ref.watch(restaurantRatingProvider(widget.id)); print(ratingsState); if (state == null) { return DefaultLayout( child: Center( child: CircularProgressIndicator(), ), ); } return DefaultLayout( title: "제목", child: CustomScrollView( controller: controller, slivers: [ renderTop( model: state, ), if (state is! RestaurantDetailModel) renderLoading(), if (state is RestaurantDetailModel) renderLabel(), if (state is RestaurantDetailModel) renderProducts(products: state.products), if (ratingsState is CursorPagination<RatingModel>) renderRatings( models: ratingsState.data, ), ], ), ); } SliverToBoxAdapter renderTop({ required RestaurantModel model, }) { // 일반 위젯 넣기 return SliverToBoxAdapter( child: RestaurantCard.fromModel(model: model, isDetail: true), ); } SliverPadding renderRatings({ required List<RatingModel> models, }) { return SliverPadding( padding: EdgeInsets.symmetric(horizontal: 16.0, vertical: 16.0), sliver: SliverList( delegate: SliverChildBuilderDelegate( (_, index) => Padding( padding: const EdgeInsets.only(bottom: 16.0), child: RatingCard.fromModel( model: models[index], ), ), childCount: models.length, ), ), ); } SliverPadding renderLoading() { return SliverPadding( padding: EdgeInsets.symmetric( vertical: 16.0, horizontal: 16.0, ), sliver: SliverList( delegate: SliverChildListDelegate( List.generate( 3, (index) => Padding( padding: const EdgeInsets.only(bottom: 32.0), child: SkeletonParagraph( style: SkeletonParagraphStyle( lines: 5, padding: EdgeInsets.zero, ), ), ), ), ), ), ); } SliverPadding renderLabel() { return SliverPadding( padding: EdgeInsets.symmetric(horizontal: 16.0), sliver: SliverToBoxAdapter( child: Text( "메뉴", style: TextStyle( fontSize: 18.0, fontWeight: FontWeight.w500, ), ), ), ); } SliverPadding renderProducts({ required List<RestaurantProductModel> products, }) { return SliverPadding( padding: EdgeInsets.symmetric(horizontal: 16.0), sliver: SliverList( delegate: SliverChildBuilderDelegate( (context, index) { final model = products[index]; return Padding( padding: const EdgeInsets.only(top: 16.0), child: ProductCard.fromRestaurantProductModel(model: model), ); }, childCount: products.length, ), ), ); } } 라우터 설정부분 (auth_provider.dart)List<GoRoute> get routes => [ GoRoute( path: "/", name: RootTab.routeName, builder: (_, state) => RootTab(), routes: [ GoRoute( path: "restaurant/:rid", name: RestaurantDetailScreen.routeName, builder: (_, state) => RestaurantDetailScreen( id: state.pathParameters['rid']!, ), ), ], ), GoRoute( path: "/splash", name: SplashScreen.routeName, builder: (_, state) => SplashScreen(), ), GoRoute( path: "/login", name: LoginScreen.routeName, builder: (_, state) => LoginScreen(), ), ]; 메인import 'package:actual/common/provider/go_router.dart'; import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; void main() { runApp( ProviderScope( child: _App(), ), ); } class _App extends ConsumerWidget { const _App({Key? key}) : super(key: key); // 라우팅시 BuildContext 사용하기 위한 구조 @override Widget build(BuildContext context, WidgetRef ref) { final router = ref.watch(routerProvider); return MaterialApp.router( theme: ThemeData( fontFamily: "NotoSans", ), debugShowCheckedModeBanner: false, routerConfig: router, ); } } 라우트 프로바이더 (go_router. dart)import 'package:actual/user/provider/auth_provider.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:go_router/go_router.dart'; final routerProvider = Provider<GoRouter>((ref) { final provider = ref.read(authProvider); return GoRouter( routes: provider.routes, initialLocation: "/splash", refreshListenable: provider, redirect: (context, state) { return provider.redirectLogic(state); }, ); }); 오류 로그======== Exception caught by gesture =============================================================== The following NoSuchMethodError was thrown while handling a gesture: Class 'ConsumerStatefulElement' has no instance method 'go'. Receiver: Instance of 'ConsumerStatefulElement' Tried calling: go("/restaurant/5ac83bfb-f2b5-55f4-be3c-564be3f01a5b") When the exception was thrown, this was the stack: #0 Object.noSuchMethod (dart:core-patch/object_patch.dart:38:5) #1 RestaurantScreen.build.<anonymous closure>.<anonymous closure> (package:actual/restaurant/view/restaurant_screen.dart:17:21) #2 GestureRecognizer.invokeCallback (package:flutter/src/gestures/recognizer.dart:275:24) #3 TapGestureRecognizer.handleTapUp (package:flutter/src/gestures/tap.dart:654:11) #4 BaseTapGestureRecognizer._checkUp (package:flutter/src/gestures/tap.dart:311:5) #5 BaseTapGestureRecognizer.acceptGesture (package:flutter/src/gestures/tap.dart:281:7) #6 GestureArenaManager.sweep (package:flutter/src/gestures/arena.dart:167:27) #7 GestureBinding.handleEvent (package:flutter/src/gestures/binding.dart:469:20) #8 GestureBinding.dispatchEvent (package:flutter/src/gestures/binding.dart:445:22) #9 RendererBinding.dispatchEvent (package:flutter/src/rendering/binding.dart:331:11) #10 GestureBinding._handlePointerEventImmediately (package:flutter/src/gestures/binding.dart:400:7) #11 GestureBinding.handlePointerEvent (package:flutter/src/gestures/binding.dart:363:5) #12 GestureBinding._flushPointerEventQueue (package:flutter/src/gestures/binding.dart:320:7) #13 GestureBinding._handlePointerDataPacket (package:flutter/src/gestures/binding.dart:293:9) #14 _invoke1 (dart:ui/hooks.dart:158:13) #15 PlatformDispatcher._dispatchPointerDataPacket (dart:ui/platform_dispatcher.dart:382:7) #16 _dispatchPointerDataPacket (dart:ui/hooks.dart:91:31) Handler: "onTap" Recognizer: TapGestureRecognizer#cc27d debugOwner: GestureDetector state: ready won arena finalPosition: Offset(158.8, 246.5) finalLocalPosition: Offset(142.8, 190.5) button: 1 sent tap down ==================================================================================================== F/crash_dump32(30915): crash_dump.cpp:474] failed to attach to thread 188: Permission denied
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
GoRouter 프로젝트에 적용 후 질문있습니다
GoRouter 적용하는 강의 후 처음 splash screen으로 진입 후 getMe함수를 통해 state가 null이 되는 로직을 통과했음에도 router의 redirect를 따르지 않고 계속해서 splash screen에서 머무는 모습이 나타납니다. print로 결과를 확인해보니 처음 redirect 로직을 검증할 때 UserModelLoading의 Instance로 나타나고 이후 getMe를 통해 null이 되더라도 새롭게 redirection이 일어나지 않는 것 같습니다. 고민하다가 해결책이 떠오르지 않아 문의남깁니다!
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
안녕하세요 InputDecoration() 의 border, enabledBorder, focusedBorder 에 대해서 질문있습니다
border: baseBorder 로 설정했을때 color 를 Colors.red 로 해놔도 아무 변화가 없습니다.enabledBorder: baseBorder 설정했을때 그제서야 빨간색이 적용됩니다. focusedBorder 는 커서가 있을때 border 의 형태로 이해가 되었는데 일반 border 와 enabledBorder 속성은 어떤차이가 있는걸까요? border 속성만 사용할때는 아무 변화가 없는 이유도 궁굼합니다.
-
미해결Flutter 초급 - Http통신, 상태관리
[네이티브연동 관련 질문]
kotlin MainActivity에 강의에서 알려주신대로 쳤는데 왜 오류가 날까요?근데 일단 실행은 문제가 없었습니다.
-
미해결[2024 최신] [코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
Flutter Hello World 에서 에러가 발생합니다.
안녕하세요, Flutter에 익숙해지기 위해 해당 강의를 보며 샘플 코드(?)와 비슷하게 코드를 추가하고 hot reload 버튼을 눌렀습니다. 그러자 IOS simulator(iPhone 14 Pro Max)에서 "Lookup failed: title in @getters in MyHomePage in package:hello_world/main.dart" 에러가 발생하여 추가 한 코드가 정상동작을 하는지, 수정해야 하는 부분이 있는지 확인이 불가능하게 되었습니다. 혹시 제가 추가한 코드에서 문제가 될 만한 부분이 있을까요? 제가 추가한 코드와 IOS simulator 에러 화면 첨부드립니다.
-
해결됨[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
Sec 9. 5번째 강의 1분 대 Provider를 Code generation으로 어떻게 고칠 수 있을까요?
안녕하세요. 실험적으로 Code Generator 기능을 이용해서 프로바이더를 다시 작성해보고 있습니다.궁금한 게 Section 9. 다섯 번째 강의를 보는데, 1분 대에 나오는 RestaurantStateNotifier와 StateNotifierProvider를 어떻게 CodeGenerator를 이용해서 고칠 수 있을까 고민 중입니다. 시도한 코드는 아래와 같은데요(import는 생략했습니다):part 'restaurant_provider.g.dart'; @Riverpod(keepAlive: true) class Restaurant extends _$Restaurant { final RestaurantRepository repository; Restaurant({ required this.repository, }) { paginate(); } // 초기 상태는 Loading 상태로 @override CursorPaginationBase build() { return CursorPaginationLoading(); } paginate() async { final response = await repository.paginate(); state = response; } } 코드 제너레이션은 잘 되는데, 문제는 이를 실행시키려고 하니 다음과 같은 에러가 뜹니다. Launching lib/main.dart on iPhone 14 Pro Max in debug mode... main.dart:1Xcode build done. 3.9sFailed to build iOS appError (Xcode): lib/restaurant/provider/restaurant_provider.g.dart:15:3: Error: The argument type 'Restaurant Function({RestaurantRepository repository})' can't be assigned to the parameter type 'Restaurant Function()' because 'Restaurant Function({RestaurantRepository repository})' is nullable and 'Restaurant Function()' isn't. restaurant_provider.g.dart:15Could not build the application for the simulator.Error launching application on iPhone 14 Pro Max.Exited 이전까지는 잘 됐었는데, 바로 직전 강의에서 CursorPaginationBase를 만들고, 이를 상속받는 CursorPagination 상태들을 구현하고 나서부터, 문제가 발생한 것 같습니다.아마 CursorPagination의 경우는 data와 meta라는 필드가 들어가는데, 어디선가 Code generation에 문제가 생겨서, CursorPaginationBase가 아닌, data와 Meta를 필요로 하는 생성자가 호출된 건 아닌가 의심하는 중입니다. 아래는 위 코드로 생성된 .g.dart 파일입니다. // GENERATED CODE - DO NOT MODIFY BY HAND part of 'restaurant_provider.dart'; // ************************************************************************** // RiverpodGenerator // ************************************************************************** String _$restaurantHash() => r'50915edab0a63433f5d54b932240cf504147e391'; /// See also [Restaurant]. @ProviderFor(Restaurant) final restaurantProvider = NotifierProvider<Restaurant, CursorPaginationBase>.internal( Restaurant.new, name: r'restaurantProvider', debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product') ? null : _$restaurantHash, dependencies: null, allTransitiveDependencies: null, ); typedef _$Restaurant = Notifier<CursorPaginationBase>; // ignore_for_file: unnecessary_raw_strings, subtype_of_sealed_class, invalid_use_of_internal_member, do_not_use_environment, prefer_const_constructors, public_member_api_docs, avoid_private_typedef_functions 어떻게 하면 Code Generator를 이용해서 문제를 해결할 수 있을까요?
-
해결됨[2024 최신] [코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
video영상을 choose하면 메인으로 돌아가요
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.코드팩토리 디스코드https://bit.ly/3HzRzUMFlutter 강의를 구매하시면 코드팩토리 디스코드 서버 플러터 프리미엄 채널에 들어오실 수 있습니다! 디스코드 서버에 들어오시고 저에게 메세지로 강의를 구매하신 이메일을 보내주시면 프리미엄 채널에 등록해드려요! 프리미엄 채널에 들어오시면 모든 질의응답 최우선으로 답변해드립니다!video영상을 choose하면 compressing video를 거치고 메인으로 돌아가버려요뭐가 문제일까요?