묻고 답해요
160만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
Provider과 stateful 같이 쓰는 이유??
provide를 사용해도 watch해서 사요하면 화면이 바뀌는데Provider+stateful을 왜 사용하는지 모르겠습니다 ㅠㅠ(extends결합한 consumer…)
-
해결됨[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
nested구조에서 JsonSerializable를 사용하고 싶을 땐 어떤 방법을 고려해야하나요?
만약 deliveryFee에 대한 서버의 응답이 json['delivery']['fee'] 일 경우 deliveryFee 란 변수를 그대로 사용한다는 가정하에JsonSerializable에선 어떤 방법으로 처리해줘야하는걸까요?
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
아래 질문 하신분이랑 정확히 같은 증상입니다
정확히 ‘127.0.0.1:3000’ const로 선언 해놨는데로그인 요청시마다 포트가 랜덤하게 바뀌며 61번 에러가 납니다디오 버전 똑같이 설정했습니다.
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
print(resp.data); 여기부터 안되네요
응답이 없네요메세지가 안나와요D/EGL_emulation( 5140): app_time_stats: avg=6131.28ms min=9.11ms max=12253.46ms count=2이건만 나오는데 안드로이드 사용해서 ip 문제인가 해서 final ip = Platform.isAndroid ? simulatorIp : emulatorIp; 이걸로 바꾸어 봐도 안되구요단, 메세지는 조금 달라졌습니다.D/EGL_emulation( 7555): app_time_stats: avg=13725.68ms min=13725.68ms max=13725.68ms count=1D/EGL_emulation( 7555): app_time_stats: avg=688.99ms min=273.39ms max=1104.59ms count=2E/flutter ( 7555): [ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: DioError [DioErrorType.other]: SocketException: Connection refused (OS Error: Connection refused, errno = 111), address = 127.0.0.1, port = 52818E/flutter ( 7555): Source stack:이하 생략... 해결 부탁드립니다.
-
해결됨[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
안녕하세요. 백그라운드 관련 질문이 있습니다.
이 강의를 보고 영감을 받아 작은 프로젝트를 진행중에 있는데 궁금한점이 있어서 올립니다.알람 기능을 개발하면서 android_manager_alarm_plus 패키지를 사용중인데 최근 안드로이드 버전은 Doze모드로 인해 백그라운드에서는 알람매니저가 제대로 활성화되지 않는다고 들었습니다.저 역시 만든 코드를 테스트하면 백그라운드 상황에서 알람 상태처리까지는 이루어지더라도 포그라운드 화면으로 넘어가는(쉽게 말해 홈화면이나 꺼진 화면에서 알람 화면이 떠야하는) 과정이 이루어지지 않아 다른 방법을 모색하고 있는 중입니다. 코팩님도 백그라운드에서 처리하는 앱개발이나 유지보수를 해보신 경험이 있으셨다면 안드로이드 버전이 올라갈수록 어떻게 진행하셨는지 궁금해서 여쭤봅니다.최근 구글링을 하다보니 FCM을 권장한다는 말이 있던데 이건 아무래도 서버통신이다보니 네트워크연결이 반드시 필요해보이는 것 같아 고려중에 있습니다
-
미해결급하게 준비하는 모바일 앱 점검
디컴파일을 통해 루팅 우회하기에서 질문있습니다.
안녕하세요.디컴파일을 통해 루팅 우회하기 수업에서 질문이 있습니다. 영상에 나와있는 그대로 c.smali 파일에서 super를 su로 변경, MainActivity.smali에서 라인87의 if-eqz를 if-nez로 변경 후 서명하여 nox에서 설치를 했습니다. 하니, 아래와 같이 텍스트만 변경이 되고 앱이 꺼지는 현상이 여전히 있었습니다.(MainActivity.smali 라인 71의 if-eqz를 if-nez로 변경도 해보았으나 동일 현상)혹시 몰라서 c.smali에서 수정하고 MainActivity.smali에서는 수정을 안하고 혹은 그 반대로도 해보는 등 여러가지로 진행을 해보았는데요.동일한 현상이 확인되어 영상과 같이 되지 않아 질문드립니다.감사합니다.
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
코드 문의
코드 클론 후 아래 코드에서style: ElevatedButton.styleFrom( primary: PRIMARY_COLOR,),아래 에러가 발생하는데 왜 발생하는 것일까요?The named parameter 'primary' isn't defined.
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
수동으로 클래스 만들어도 되는건가요?
retrofit을 쓰다가@Get(path)Future<레스토랑디테일모델> get레스토랑디테일…요롷게 쓰셨는데 선생님께서 말씀해주시길 클래스 타입과 json타입이 딱 맞아야 한다고 해주셨잖아요 여기서 반환되는 클래스 타입을 json 시리얼라이즈 로 편하게 만들고 있는데 , json 시리얼라이데이션 안쓰고 수동으로 클래스를 만들어도 사실 되는거죠??!
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
리스너 안쓰고 이렇게도 되나요?
선생님께서는 tabbarview에서 리스너 만들어 등록하셨는데 리스너 안쓰고 1) currentindex: controller.index를 코드에 넣어도 되지 않나요?!?! 리스너 안쓰고 2) on tap 에서 controller.animateTo(index)밑에 추가로Setstate( this.index=index) 이렇게 해도 되지 않나요 ?! 예상에는 2개다 다 가능할 거 같은데 맞는지 질문 남깁니다 ..!
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
Setstate 질문이요
Ontap 같은 경우는 Setstate를 써서 값 변경시 적용해주는데 음…onchanged 같은 건 발 this.변수 = 변수 이렇게. Setstate를 쓰지않고 바로 적용이 되는거 같아요 …,, 코드를 들여다보면 무슨차이가 있길래 Setstate 가 한쪽은 있고 한쪽은 없는 걸까요
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
dio + retrofit 으로 restapi와 통신중 파라미터 타입 이슈
안녕하세요 코팩님. 파라미터 전달 과정에 생긴 이슈가 있어 문의드립니다. 현제 client에서 post로 데이터를 전송하고 body에는 itemPrice라는 키로 double형 데이터를 보내고 있습니다.로그를 찍어보면 22000.0 으로 찍히고 api서버에 제대로 넘어가서, api서버는 맵으로 받게 되어있어서 형변환해서 사용하고 있습니다. 이번에 테스트겸 web으로 빌드를 하여 배포를 하고 테스트를 진행을 하고 있는데요,동일한 페이지에서 동일한 액션을 했을때 값이 double형이 아닌 22000으로 전달이 되는것이 확인되었습니다....서버에서는 int로 왔기 때문에 형변환 오류가 발생했구요.값을 보내기전과 dio onRequest에서도 값을 찍어봐도 dobule형이 아닌 Integer 형인 2200으로 되서 보내지더라구요. 애초에 itemPrice로 넣는 값은 double 형 변수에 담아 값을 관리합니다. dynamic 타입읩 맵에 dobule형 변수 값을 넣어도, 값이 integer 형태면 dobule로 안들어 가는 것 같습니다(웹으로 빌드시에)이런경우 조금 난감한데요 , 어떤식으로 풀어야할지 조언 부탁드립니다. 감사합니다.
-
미해결급하게 준비하는 모바일 앱 점검
Mac OS도 수강 및 실습이 가능한지요?
안녕하세요. 강사님저는 윈도우가 아닌 Mac m1으로 진행을 하려고 합니다.일단 막히는 부분이 없으면 답변을 주시기 전까지 계속 Mac OS로 하려고 하는데요.환경변수나 이후 실습 진행할때 윈도우와 다를거 같아서 질문드립니다.
-
해결됨[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
StateNotifierProvider를 리버팟 제네레이터로 생성하기
class PaginationStateProvider<T extends IModelWithId, U extends IBasePaginationRepository<T>> extends StateNotifier<CursorPaginationBase> { final U repository; PaginationStateProvider({ required this.repository, }) : super(CursorPaginationLoading()) { paginate(); } Future<void> paginate() async { // 생략 } }위의 코드를 riverpod_generator 이용하는 코드로 바꾸고 싶은데 아무리 고민해봐도 모르겠습니다.@riverpod class PaginationState extends _$PaginationState { @override CursorPaginationBase build() { return CursorPaginationLoading(); } Future<void> paginate() async {} }이렇게 작성하면 로딩만 적용되니까 paginate()는 무시되고요... 샘플 코드를 알려 주실 수 있나요?
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
JSON serialize 진행시 오류 문의드립니다.
안녕하세요.강의를 잘 듣고있습니다. "pub run build_runner build" 진행후에 다음과 같은 에러가 발생하여 json_annotaion의 버전을 4.8.1로 변경하였습니다. [INFO] Generating build script completed, took 260ms[INFO] Reading cached asset graph completed, took 171ms[INFO] Checking for updates since last build completed, took 584ms[WARNING] json_serializable on lib/restaurant/model/restaurant_mdoel.dart:The version constraint "^4.8.0" on json_annotation allows versions before 4.8.1 which is not allowed.[INFO] Running build completed, took 2.5s[INFO] Caching finalized dependency graph completed, took 94ms[INFO] Succeeded after 2.6s with 1 outputs (1 actions) json_annotation: ^4.8.1 dev_dependencies: flutter_test: sdk: flutter flutter_lints: ^2.0.0 build_runner: ^2.3.3 json_serializable: ^6.6.0이후 정상적으로 처리가 된것 처럼 결과가 나타났고, Built build_runner:build_runner.[INFO] Generating build script completed, took 258ms[INFO] Reading cached asset graph completed, took 174ms[INFO] Checking for updates since last build completed, took 581ms[INFO] Running build completed, took 2.5s[INFO] Caching finalized dependency graph completed, took 95ms[INFO] Succeeded after 2.6s with 1 outputs (1 actions) . lib 폴더를 reload 해도 restaurant_model.g.dart 파일이 만들어 지지않습니다.
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
@Queries() 이노테이션
restaurant_repository.dart에서 사용되는 Future<CursorPagination<RestaurantModel>>paginate({ @Queries() PaginationParams? paginationParams=const PaginationParams(),}); @Queries() 이노테이션이 궁금합니다. 구글링해봐도 명확하게 나오지 않습니다.
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
Restaurant Pagination - 3 문의사항
Restaurant Pagination - 3 챕터 중 궁금한 사항이 있어서 글을 남깁니다.RestaurantStateNotifier 클래스의 생성자에}) : super(CursorPaginationLoading()) { paginate();}라는 CursorPaginationLoading 상태를 넣었으며, restaurant_screen.dart에는 아래와 같은 로직이 들어있습니다.if (data is CursorPaginationLoading) { return Center( child: CircularProgressIndicator(), );}위 내용을 보았을때, 무한적으로 로딩이 걸려야 하는 것 아닌가요? 어떻게 약간의 로딩 후 정상적인 페이지를 나타내는지 이해가 잘 되지 않습니다..
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
AuthRepository의 token() 메소드는 사용되는 곳이 없는것같은데 맞나요?
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.코드팩토리 디스코드https://bit.ly/3HzRzUMFlutter 강의를 구매하시면 코드팩토리 디스코드 서버 플러터 프리미엄 채널에 들어오실 수 있습니다! 디스코드 서버에 들어오시고 저에게 메세지로 강의를 구매하신 이메일을 보내주시면 프리미엄 채널에 등록해드려요! 프리미엄 채널에 들어오시면 모든 질의응답 최우선으로 답변해드립니다! 토큰을 재발급하는 로직은 dio interceptor 내부에서 일어나고있는것으로 이해했는데,그러면 AuthRepository에서 Future<TokenResponse> 타입을 반환하는 token()메소드는 왜 존재하고 어디에 사용되는 것인가요?
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
go router redirect 동작 질문
안녕하세요 redirect 이용해서 구현하는 것에 질문이 있어요 예를 들면 1) 어떤 상세 페이지에서 컨텐츠 보고 있었음 2) 토큰만료 되서 로그인 페이지로 감 3) 재로그인하고 아까 상세 페이지로 복귀 또는 1) 로그아웃했음 (auth state 에 따라 redirect함)2) 뒤로 가기가 있는 로그인 페이지로 이동 3) 뒤로가기 하고 싶으나 (context.pop할 페이지가 없다고 나옴)이런 시나리오라 할 떄 go router 같은 경우 redirect 으로 로그인 페이지로 보내게 되면 context.pop할때 뒤로갈 페이지가 없다고 되는데 이런경우는 어떻게 다뤄야할까요? 당장 생각되는건 redirect 되는 페이지들이 context.go 처럼 작동되어서 context.push 같이 redirect 될 수 있도록 조절이 가능하면 좋을 것 같다는 생각이 드는데 방법이 있는지 궁금해요.만약에 위 해결 방법이 없다면 수동적으로라도 redirect 을 사용 안하고 auth state 별로 라우팅을 명시해주는게 나을까요..?아래는 구현한 코드 예제입니다 final goRouterProvider = Provider<GoRouter>((ref) { final authProvider = AuthNotifier(ref: ref); return GoRouter( navigatorKey: MyApp.navigatorKey, debugLogDiagnostics: false, initialLocation: RouterPathEnum.SPLASH.path, redirect: authProvider.redirectLogic, refreshListenable: authProvider, routes: [ ...RouterPathEnum.values .map( (value) => transitionRoute( path: value.path, routerEnum: value, duration: const Duration(milliseconds: 500), ), ) .toList(), ...goDynamicRouteList, /// -- Deep Link Page -- ], ); }); class AuthNotifier extends ChangeNotifier { final Ref ref; AuthNotifier({required this.ref}) { //LoginPlatformEnum 상태 listen -> 상태가 변경되면 notifyListeners() 호출 ref.listen<LoginPlatformEnum?>( authViewModelProvider, (previous, next) { if (previous != next) { notifyListeners(); } }, ); } String? redirectLogic(_, GoRouterState state) { final authState = ref.read(authViewModelProvider); /// 로그인 여부 final authenticated = authState; /// 로그인 하려는 경우 final authenticating = (state.matchedLocation == RouterPathEnum.LOGIN.path) || (state.matchedLocation == RouterPathEnum.SIGNUP.path) || (state.matchedLocation == RouterPathEnum.PASSWORD_RESET.path); final isSplash = (state.matchedLocation == RouterPathEnum.SPLASH.path); log('authenticated.value: $authenticated authenticating: $authenticating'); if (isSplash) return null; /** * authenticated - 로그인이 안된 경우 (LoginPlatformEnum.none) * 로그인을 시도하는 케이스 : 원하는 페이지로 이동 * 그 외 케이스 : 로그인 페이지 이동 */ if (authenticated == LoginPlatformEnum.NONE) { return authenticating ? null : RouterPathEnum.LOGIN.path; } /** * authenticated - 로그인 성공한 경우 * 로그인하려는 페이지 or splash -> total main 페이지로 이동 * 그 외 케이스 : 원하는 페이지로 이동 */ return (authenticating) ? RouterPathEnum.TOTAL_MAIN.path : null; } }
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
401 에러(bad response)
안녕하세요. FutureBuilder로 레스토랑 데이터를 받는 과정에서 401 에러가 발생해서 질문드립니다.커뮤니티에서도 저와 비슷한 에러를 가진 분의 질문글을 봤었는데 해결된 답변이 없어서 올렸습니다.에러 내용입니다DIo interceptor 부분에서 문제일 것 같다는 답변을 주셨는데 어디를 손봐야할지 모르겠습니다 ㅠ...제 레포지토리 주소도 같이 올리겠습니다https://github.com/k2h2j3/flutter_study
-
해결됨[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
factory를 Card에서 안 만들고 이런 방식은 어떤가요 ??
RestaurantCard에서 factory를 생성하지 않고 parse된 item을 RestaurantCard 타입으로 넣어주는건 안 좋은 방법일까요 ??