월 26,400원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결[코드팩토리] [중급] 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 라고 뜨는데 해결방법을 모르겠어서 확인 부탁드리겠습니다...!
- 해결됨[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
[GoRouter & Authentication 마무리하기] 401 에러
토큰 만료 이후 GoRouter & Authentication 따라할 경우 401 에러를 저도 만났어요. 유사 질문들과 답변이 있어, 저도 경험기 공유합니다.증상GoRouter 적용 후 재실행시 Splash 화면에서 무한 로딩http://127.0.0.1:3000/user/me/ 호출에서 401 로그 확인원인refreshToken 이 있거나 accessToken이 있는 경우에 토큰이 만료된 상태이면 증상 발생 의심해결user_me_provider.dart 파일 > getMe() 에서try catch & state 초기화 추가재실행Future<void> getMe() async { // ... 중략 try { final resp = await repository.getMe(); state = resp; } catch(e, stack) { print(e); print(stack); state = null; } }저와 동일한 오류를 만나는 분에게 소소한 도움이 되길 바래요 :)
- 해결됨[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
data.utils.dart 파일 수정 후에도 에러가 발생합니다.
안녕하세요, 개발 초급자로 따라 가기 버거운 가운데, Pagination 일반화까지 잘 따라 온 것 같은데, 사소한(?) 에러에 봉착했네요. Rating Pagination 강의에서 Pagination 일반화 후 RatingModel 출력 결과를 확인하는 가운데, data.utils.dart 파일에서 listPathsToUrls 함수의 매개변수를 List<String>에서 List로 변경해 주면 에러가 사라지는 것으로 확인해 주셨는데요.저는 똑같이 수정 후 build까지 해 주었는데, 아래와 같은 에러가 발생합니다.어디가 잘못된 걸까요?
- 해결됨[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
FlutterSecureStorage() 에서 const 선언
안녕하세요, 강의 잘 보고 있습니다.초급 후 중급으로 넘어가니 서버/클라이언트의 관계까지 고려해야 하고 배워야 할 것들이 산더미 처럼 넘쳐 나네요...토큰 선언시:const ACCESS_TOKEN_KEY = 'ACCESS_TOKEN'; const REFRESH_TOKEN_KEY = 'REFRESH_TOKEN';const로 하셨는데...RunTime 시 ID/ PW를 제대로 입력시 토근을 받아와서 저장하는 코드입니다.await storage.write(key: REFRESH_TOKEN_KEY, value: refreshToken); await storage.write(key: ACCESS_TOKEN_KEY, value: accessToken); 궁금한 것은 일반변수로 선언해야 될 것같은데요..FlutterSecureStorage()의 특정한 기능이 있는 것일까요?
- 미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
dio 패키지는 redirect 처리를 하기 어렵나요?
Node.js express 로 라우터를 설정해 다음과 같은 코드로 http 통신을 했습니다/api/test1 주소의 post 라우터에서 /api/test2 주소의 post 라우터로 redirect 되는 통신을 테스트 해보았습니다 onPressed: () async { var res = await http.post(Uri.parse("$uri/api/test1"), headers: <String, String>{ 'Content-Type': 'application/json; charset=UTF-8', }, body: jsonEncode( { "key1": "1000", }, )); if (res.statusCode == 307) { var newURL = res.headers["location"]; print(res.body); res = await http.post(Uri.parse("$uri$newURL"), headers: <String, String>{ 'Content-Type': 'application/json; charset=UTF-8', }, body: jsonEncode( { "key1": "1000", }, )); print(res.body); } else { var data = res.body; print(data); } },테스트 결과 제가 데이터를 올바르게 전송할 수 있었습니다 그리고 이번에 선생님의 강의를 듣고 dio라는 패키지를 알게되어서 dio 패키지를 통해서 똑같은 통신 테스트를 해 보았습니다 onPressed: () async { final dio = Dio(BaseOptions( contentType: "application/json", followRedirects: false, maxRedirects: 5, )); final url = "$uri/api/test1"; final body = {'key1': '1000'}; final headers = {'Content-Type': 'application/json'}; try { Response res = await dio.post( url, data: body, ); if (res.statusCode == 307) { final redirectUrl = res.headers.value("location"); final redirectRes = await dio.post( redirectUrl!, data: body, options: Options( headers: headers, method: "POST", ), ); print(redirectRes.data); } else { final data = res.data; print(data); } } catch (e) { print("error 발생 $e"); } },followRedirects 을 true 로 해도 307 코드를 해결하지는 못하는것 같습니다 flutter: error 발생 DioError [DioErrorType.response]: Http status error [307]어떻게 dio 패키지로 redirect 를 처리 할 수 있을까요?
- 미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
_RestaurantRepositor 에러
코드 제네레이션을 해도 도대체 무슨에러인지 모르겟어서 에러메세지랑 g파일까지 올려봅니다 도와주세요 ㅠㅠerror: The redirected constructor '_RestaurantRepository Function(Dio, {String? baseUrl})' has incompatible parameters with 'RestaurantRepository Function(Dio, {String baseurl})'. (redirect_to_invalid_function_type at [actual] lib\restaurant\repository\restaurant_repository.dart:13)
- 해결됨[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
장바구니 결제에서 에러가 발생합니다
안녕하세요 코팩님. 벌써 90%가량 듣게된 수강생입니다여러 우여곡절 끝에 글 한 번만 쓰고 여기까지 오게되었는데요물론 다시 들으면서 복기를 해야만 하겠지만 큰 문제없이 왔습니다이 문제를 해결 못하는 것 보니 특히나..그런데 장바구니 결제에서 에러가 발생합니다장바구니 담기는 것까지는 별 문제가 없었는데요현재 상황에서는 결제가 안 되면, false 값만 전달받기 때문에 어디서 문제인지 알기가 힘듭니다에러가 발생하는 곳은 basket_screen.dart의 스낵바일 테구요,스낵바에서 호출하는 곳은 postOrder() 메서드니까,orderProvider에서 try-catch에서 에러가 발생하나 봅니다캐치하는 에러를 프린트하니type 'Null' is not a subtype of type 'String' in type cast 입니다 에러가 어디서 난 것인지 알면 검색을 해다가 해결을 하겠는데3일째 못찾고 있어서 올려봅니다.스트링 캐스트가 잘못된 것 같아서,그리고 장바구니 결제 이후의 파일들을 다 살펴봐도 모르겠네요.제가 해본 건 DateTime쪽 문제인가 싶어서 건드려봤었고그래서 아래 깃허브 코드가 거기는 다르구요코드도 여러 번 비교해봤는데 모르겠네요...깃허브도 올려놓아보겠습니다
- 미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
initState 에서 provider.read 를 해서 초기 데이타를 가져오고 싶은데 가능 한지요?
안녕하세요.중급 강의 잘 듣고 많은 도움이 되었습니다.한가지 질문이 있는데요. view의 initState 에서 provider read 를 통해 데이타를 가져와 state 에 넣어주고,View 의 widget tree 내에서 watch 해서 쓰고 싶습니다.아래처럼 provider.read 를 쓸 수는 없을까요? 꼭 onClick 같은 이벤트 내에서만 쓸 수 있는 것인가요? @overridevoid initState() {// TODO: implement initStatesuper.initState();ref.read(floorNoProvider.notifier).getData();} 그럴 경우 아래와 같은 에러가 발생하는데요.Tried to modify a provider while the widget tree was building. 방법이 없을까요?
- 미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
자동 패키지 임포트 관련 질문 드립니다.
final storage = FlutterSecureStorage();import 'package:flutter_secure_storage/flutter_secure_storage.dart';강의중 FlutterSecureStorage 사용시에 자동으로 임포트 추천 구문이 나오는데 저도 인텔리제이 사용중인데 클래스 생성과 메서드 생성 구문만 나와서 질문드립니다.자동으로 임포트를 해주는 플러그인이 따로 있을까요?
- 미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
초급 중급 마무리한 학생입니다.. 파베관련 질문 하나만 받아주실 수 있을까요
코팩님 덕분에 초급 중급 강의 열심히 듣고 파베 듣고 있습니다.비록 강의와는 무관하지만.. 하루종일 구글링하다가 지쳐서 부득이하게 코팩님께 질문드립니다.죄송합니다.파베 cli로 연동하고 xcode 를 실행하면 위와같이 계속 Module 'firebase_core' not found에러가 납니다. pod 재설치도 해보고 수동으로도 연동해보고 별짓 다해봐도 안되네요... 도움좀 주시면 감사드리겠습니다. + 저거 Module 'firebase_core' not found이 에러만 나는 게 아니라 등록한 firebase package 전부다 인식이 안되는 듯 합니다...
- 미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
Pagination 질문드립니다
안녕하세요. pagination관련해서 궁금한 게있습니다.저는 백엔드를 직접 구축하고강의를 수강하고있는데요,Order를 생성하는 provider Ordrer 리스트를 조회하는 Pagination (강의에서 진행한 방식의 Pagination Model)제가 아직 상태관리에 이해가 부족해서 그런지, Order가 생성되면List<OrderModel>에 맞추어 데이터를 담아두고 생성될 때마다 페지네이션을 상속받는 데이터 리스트들이 업데이트 돼야하지 않나하는 생각이 드는데 그렇개 작동되지 않더라구요Order를 생성하고 나서order 리스트를 볼 수 있는 페이지에 오면데이터가 업데이트 되지않습니다.어떻게해야 Creat이후 Read가 업데이트가 되나요?
- 미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
레이아웃에 대해서 궁금한 질문!
안녕하세요. 공통 레이아웃으로 앱바, 네비게이션 등을 프롭스(?)로 받아서 하나의 레이아웃 파일로 여러 파일, 페이지에서 사용하는거랑타입별로 예를들어서 앱바있는 타입의 레이아웃, 앱바+바텀네비게이션 있는 타입의 레이아웃 등등... 이런식으로 파일을 여러개 레이아웃을 만들어놓고 사용하는거랑 뭔가 최적화 적으로 차이가 있을까요? 갑자기 궁금합니당