묻고 답해요
160만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결[코드팩토리] [중급] 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 라고 뜨는데 해결방법을 모르겠어서 확인 부탁드리겠습니다...!
-
해결됨[코드팩토리] [중급] 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, 인증로직 등 중수가 되기 위한 필수 스킬들!
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, 인증로직 등 중수가 되기 위한 필수 스킬들!
초급 중급 마무리한 학생입니다.. 파베관련 질문 하나만 받아주실 수 있을까요
코팩님 덕분에 초급 중급 강의 열심히 듣고 파베 듣고 있습니다.비록 강의와는 무관하지만.. 하루종일 구글링하다가 지쳐서 부득이하게 코팩님께 질문드립니다.죄송합니다.파베 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가 업데이트가 되나요?