묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
List 에 item 추가시에 add 와 ... 의 차이점이 궁금합니다.
안녕하세요.중급강의 장바구니 제작 부분 수강중입니다.state 에 item 을 추가하실때이런 식으로 spread operator 를 사용하시던데요. 혹시 add 메서드를 사용해서 추가해도 결과는 똑같은가요?state.add(BasketItemModel(product: product, count: 1)); 나름대로 찾아보니깐spread operator 를 사용하면 deep copy가 되고add 메서드는 단순히 reference 만 추가하는 방식인거 같은데,,맞는지 궁금합니다. 나중에 다른 코드에서도 List 에 item 을 추가할때spread operator 를 사용하는게 더 좋은지도 궁금하고요. 좋은 강의 감사합니다!
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
주문 목록 API 호출 시 500 에러 (undefined (reading '0'))
주문 목록 실행 시 서버쪽 로그에서 아래와 같은 에러가 발생합니다. [Nest] 89380 - 04/14/2023, 5:33:24 PM ERROR [ExceptionsHandler] Cannot read properties of undefined (reading '0')TypeError: Cannot read properties of undefined (reading '0')at /cf-flutter-lv2-server/src/order/order.service.ts:35:39 호출 API 는 아래처럼 보내집니다.http://127.0.0.1:3000/order/?count=20 혹시 위 현상에 대해서 어떤 이유가 있을까요? 아래 서버 로그 추가로 올립니다. { basket: [ { productId: '76e4ddb0-0a4c-44c2-be91-b35fdd3e32a9', count: 1 }, { productId: 'faea6be9-f5ca-4005-9922-98c04ff2c89d', count: 2 } ]}PatchMeBasketDto { basket: [ { productId: '76e4ddb0-0a4c-44c2-be91-b35fdd3e32a9', count: 1 }, { productId: 'faea6be9-f5ca-4005-9922-98c04ff2c89d', count: 2 } ]}{ basket: [ { productId: 'faea6be9-f5ca-4005-9922-98c04ff2c89d', count: 2 } ]}PatchMeBasketDto { basket: [ { productId: 'faea6be9-f5ca-4005-9922-98c04ff2c89d', count: 2 } ]}{ basket: [ { productId: 'faea6be9-f5ca-4005-9922-98c04ff2c89d', count: 1 } ]}PatchMeBasketDto { basket: [ { productId: 'faea6be9-f5ca-4005-9922-98c04ff2c89d', count: 1 } ]}{ basket: [] }PatchMeBasketDto { basket: [] }
-
해결됨[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
GoRouter 사용 방식이 바뀐건지 궁금합니다.
안녕하세요.중급강의 GoRouter 부분 수강중입니다. 강의내용 대로 초기설정을 해봤는데에러가 발생하지는 않지만화면이 이동되지 않더라고요. 제가 사용하는 버전이 go_router: ^6.5.6 이라바뀐 부분이 없나 공식문서를 살펴보니초기 설정부분이 좀 다르더라고요. GoRouter configuration 정보를 _MyApp 외부에서 선언하고,설정은 routerConfig 파라미터 하나만 설정하고 끝내더라고요. 공식문서대로 하면 작동은 잘 합니다. 혹시 공식문서대로 계속 사용해야 하는건지아니면 강의 내용대로 해도 되는건데제가 받아 적은 코드가 잘못된건지궁금합니다. 아래는 공식문서 스샷 입니다.
-
해결됨[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
주문 탭에서만 force refetch가 안되는 이유
안녕하세요.드디어 완강을 하게 되었습니다! 여러번 복습을 해야겠지만 일단 너무 감격스럽네요 ㅜㅜ다름 아니라, 완강후 완성된 코드에서는 주문 탭에서 force refetch를 하면 주문 내용이 새로고침 되지가 않습니다.throttle과 debounce 를 적용하기 전에는 결제 내용이 주문 탭에 즉시 반영되지는 않아도, force refetch를 하면 반영되었거든요.깃헙에 올려주신 소스코드로도 같은 증상입니다.다른 탭에서의 force refetch는 이상없이 작동하는데 왜 그럴까요?
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
실제 핸드폰 연결하여 실습하고 싶습니다.
같은 질문 해주신 글을 보았는데,실제 컴퓨터의 ip를 넣어주어야 한다는 답변을 써주셨던데login_screen.dart 파일에서final emulatorIp = '';final simulatorip = '';이 부분의 ip주소만 바꾸면 되는게 맞나요?어느 부분을 더 수정해야 하는지 궁금합니다..
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
Dio로 Auth API 요청해보기 강의 / rest.data가 print가 되지 않습니다
강의를 순차적으로 따라해보면서 이전까지는 모두 실행되었었는데 이 부분에서 print가 되지 않습니다.http://127.0.0.1:3000/api/이 정상적으로 나오는 거로 봐서 서버도 켜져있습니다 현재 dio 패키지는 5.1.1 이 최신이지만강의대로 yaml 파일에 dio: ^4.0.6으로 작성하였습니다.
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
RestaurantCard.fromModel 의 인자
RestaurantCard.fromModel 의 인자로required RestaurantModel model가 할당되어 있는데, RestarauntDetailScreen 위젯에서 RestaurantCard 위젯을 사용할 때, RestaurantDetailModel 을 사용합니다.변수의 type이 달라도 문제가 없는 것일까요?
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
Gorouter 사용에 질문이 있습니다.
안녕하세요 먼저 강의는 잘보고있습니다.Gorouter에 대해 다시 정리하는 도중 하나 궁금한게 생겨서 질문드립니다.이론에서 사용하셨던 프로젝트 기준으로만약 이런식으로context.go('/one'); Home -> one로 이동한다고 가정했을때 Home에 print buildOne에 print build를 해두면 flutter: One Screen buildflutter: HomeScreen didChangeDependenciesflutter: HomeScreen build이렇게 찍히더라구요 (Home은 ful위젯으로 바꿔서 찍어봤습니다) 제가 의문인건 Home -> One 이동하는건데왜 Home이 다시 빌드가 되며, 이는 메모리 낭비라고 생각하는데다른 대안이나 원래 구조상 이렇게 짜여져있는건가요? 기존방식이었던Navigator.of(context).push( MaterialPageRoute(builder: (_) => OneScreen()) );이런식으로 이동을 한다면 기존스택은 남아 제가 원하는 대로 flutter: One Screen build만 찍히는데, 감사합니다.
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
IBasePaginationRepository를 U로 바꾼 이유가 궁금해요.
U로 바꾸고 extends를 하면 똑같이 쓸 수 있다고 하신 말씀은 무슨 뜻인지 이해를 했는데요, 왜 그렇게 써야 하는지를 잘 모르겠어요. 그냥 그럴 수 있다는 걸 알려주신 걸까요? 아니면 제너릭으로 U를 쓰고 extends해서 쓰는 게 어떤 이득이 있는 건가요?
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
마지막 강의보니 강의가 더나올거 같은데 언제 추가되나요?
보너스 강의가 약간 더 남았습니다~ 조금만 기다려주세요! Optimistic Response + Form + 글로벌 캐시관리를 한번에 보여주는 "리뷰 작성 페이지" 강의가 9월이 가기전에 추가될 계획입니다! 기대해주세요! (지금까지 배운 내용을 한번에 조합하는 강의입니다!)이렇게 글을 쓰셨던데 빨리 배워보고 싶네요 ㅠㅠ강의가 너무 좋아서 그런데 중급 이상강의 혹시 하나더 나올 계획은 없나요? 이 강의보단 조금더 복잡한... 너무 기다려집니다 ㅠㅠ 항상 감사합니다.
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
collection.dart 임포트할 때요.
에러는 아니지만 pubspec.yaml에 추가해달라고 워닝이 뜨는데, 이건 추가해도 되고 안해도 되는 건가요? 아니면, mapIndexde만 사용하는 정도면 펍스펙에 추가 없이 그냥 쓸수 있지만 그 이상을 사용하려면 추가해야 하는 건가요?
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
context.go 가 실행이 안될때
안녕하세요.GoRouter 이론 부분을 듣다가 context.go('/one'); 가실행이 되지 않고 버튼을 누르면 먹통입니다.context.push('/one'); 는 작동을 합니다..설치버전은 4.2.2처음에 최신버전을 사용했다가 이전 문의글들 참고해서 4.2.2로 다시 설치했습니다. 이후에 flutter clean , put get, restart 도 했어요어떤 부분을 확인해야 할까요? 도와주세요... 소스코드 ------cupertino_icons: ^1.0.2 go_router: ^4.2.2 main.dartimport 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; import 'package:go_router_actual/screen/1_screen.dart'; import 'package:go_router_actual/screen/2_screen.dart'; import 'package:go_router_actual/screen/3_screen.dart'; import 'package:go_router_actual/screen/home_screen.dart'; void main() { runApp( _App(), ); } class _App extends StatelessWidget { const _App({Key? key}) : super(key: key); GoRouter get _router => GoRouter( initialLocation: '/', // 앱을 처음 시작했을 때 보여주는 화면 // routes - 모든 스크린 정의 routes: [ GoRoute( path: '/', builder: (_, state) => HomeScreen(), routes: [ GoRoute( path: 'one', builder: (_, state) => OneScreen(), ), ], ), ], ); @override Widget build(BuildContext context) { return MaterialApp.router( routeInformationProvider: _router.routeInformationProvider, routeInformationParser: _router.routeInformationParser, routerDelegate: _router.routerDelegate, ); } } HomeScreen.dartimport 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; import 'package:go_router_actual/layout/default_layout.dart'; class HomeScreen extends StatelessWidget { const HomeScreen({Key? key}) : super(key: key); @override Widget build(BuildContext context) { return DefaultLayout( body: Column( crossAxisAlignment: CrossAxisAlignment.stretch, children: [ ElevatedButton( onPressed: () { context.go('/one'); }, child: Text( 'Screen One (Go)', ), ), ], ), ); } }
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
@Headers 에 accessToken 작성했을 시 Interceptor onRequest 에서 headers 가 빈값으로 옵니다.
레스토랑 상세 API (/restaurant/{id}) 호출 시아래와 같이 헤더값을 넣어 줬을 때@Headers({ 'accessToken': 'true', })Interceptor 의 onRequest 메서드에서 options.headers 가 빈값으로 넘어와 if (options.headers['accessToken'] == 'true') 조건을 타지 않습니다.@Headers 가 선언된 restaurant_repository.dart 에는 아래처럼 처리가 되어있고요.import 'package:dio/dio.dart' hide Headers; import 'package:retrofit/retrofit.dart';아래 링크를 찾아서https://github.com/Mindinventory/flutter-retrofit/issues/6아래처럼 수정을 하면 정상적으로 동작 하는데@Headers({ 'accessToken': 'true', }) Future<RestaurantDetailModel> getRestaurantDetail({ @Header('accessToken') required String accessToken, @Path() required String id, });동영상에서는 되고 제가 같은 방식으로 할 땐 안돼서 혹시 이렇게 처리하는게 맞는지, 아니면 어떤 부분이 잘못돼서 @Headers 로 값을 줬을 때 빈값으로 넘어오는지 궁금합니다.
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
flutter_secure_storage 를 설치하고 난후 안드로이드 에뮬레이터가 실행이 안됩니다.
flutter_secure_storage를 추가하고난후 앱 실행을 하면 안드로이드 에뮬레이터가 실행이 됐다가 바로 꺼집니다. 혹시 원인을 알수 있을까요? 추가: flutter_secure_storage를 제거하고 안드로이드 에뮬레이터를 다시 실행하면 정상적으로 작동이 되는걸 확인했습니다.
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
patchBasket 실행시 badResponse 에러가 발생합니다.
장바구니 기능 구현 중 Optimistic Response 부분에서 dio패키지의 badRespons 에러가 납니다.요청 body에 포함될 PatchBasketBody와 PatchBasketBodyBasket도 틀린 곳이 없는 것 같은데 계속 에러가 납니다.patch_basket_body.dartimport 'package:json_annotation/json_annotation.dart'; part 'patch_basket_body.g.dart'; @JsonSerializable() class PatchBasketBody { final List<PatchBasketBodyBasket> basket; PatchBasketBody({ required this.basket, }); Map<String, dynamic> toJson() => _$PatchBasketBodyToJson(this); } @JsonSerializable() class PatchBasketBodyBasket { final String productId; final int count; PatchBasketBodyBasket({ required this.productId, required this.count, }); factory PatchBasketBodyBasket.fromJson(Map<String, dynamic> json) => _$PatchBasketBodyBasketFromJson(json); Map<String, dynamic> toJson() => _$PatchBasketBodyBasketToJson(this); }basket_provider.dartFuture<void> patchBasket() async { await repository.patchBasket( body: PatchBasketBody( basket: state .map( (e) => PatchBasketBodyBasket( productId: e.product.id, count: e.count, ), ) .toList(), ), ); }이 에러 때문에 진도 나가기가 힘드네요. ㅜㅜ...한번 살펴 봐 주시기 바랍니다.제 github 저장소 주소는 https://github.com/qoren98/flutter-real-app 입니다.
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
저 vs code를 사용중인데, 코팩님처럼 코드 자동완성을 하고 싶은데요... 방법을 모르겠어요...
저 vs code를 사용중인데, 코팩님처럼 코드 자동완성을 하고 싶은데요... 방법을 모르겠어요...이런저런 확장을 다 깔아봐도 잘 안돼요...Navigator.of(까지만 쳐도 context)똭 나오고 MaterialPageRoute( 까지만 치니까 안에 파라미터로 뭘 넣어야하는지 포맷까지 똭 나오는 그런 거... vs 코드는 안되는 건가요? ㅠㅠ 그냥 공부하는 거랑은 상관 없는 얘기긴 한데 은근히 불편해서... 답변해주시면 감사하겠습니다.. ^^ 기다릴게용 ㅎ
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
Badge Flutter 3.7 현재 상환
지금 flutter 3.7상태에서는 바로 Badge를 사용하지 못합니다Flutter 3.7에서는 Badge 위젯이 Material 라이브러리에 도입되었으므로 모호한 가져오기를 피하려면 다음과 같이 패키지를 가져와야 합니다.import 'package:badges/badges.dart' as badges; 그런 다음 "Badge" 위젯 대신 "badges.Badge" 위젯을 사용합니다. 이 패키지의 모든 클래스에 대해 동일합니다.
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
JsonSerializable관련 질문드려요.
코팩님 강의와 동일하게 코드제네레이션을 한 것 같은데, 왜 g.dart파일에서 에러가 나는지 모르겠어요... ㅠㅠ as int하신 것도 동일한데 왜 형변환 에러가 나는지... 답변 기다릴게요 감사합니다...
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
섹션5, ProductCard 매핑하기에서 질문이 있어요!
안녕하세요! 중급 강의 따라가던 중에 궁금한 게 있어 질문드려요. Product_Card.dart 파일을 수정하실때, ProductCard 클래스에 RestaurantProductModel의 멤버들을 다 변수로 지정하셨잖아요? 그런데 그냥 RestaurantProductModel을 변수로 넣고 그냥 모델을 받아버리면 안되나요? class ProductCard extends StatelessWidget { final ProductModel model; const ProductCard({ required this.model, super.key, });이렇게 하고 디테일 스크린에서 ProductCard를 그냥 넘겨주는 식으로 해봤는데, 일단 동작하는 건 같더라구요. 그런데 이렇게 하지 않으신 데에는 무슨 다른 이유가 있으신건지 궁금합니다! 혹시 제 마음대로 했다가 나중에 문제가 생기진 않을까 걱정이 되어서... 답변기다리겠습니다. 감사합니다! ^^
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
statusCode 500 에러
Internal server error 라고 뜨는데 해결방법을 모르겠어서 확인 부탁드리겠습니다...!