월 26,400원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 해결됨[코드팩토리] [중급] 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를 이용해서 문제를 해결할 수 있을까요?
- 미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
초기화 질문
안녕하세요 속도를 위해 캐싱을 하고 있지만 매번 다시 초기화 해서 불러올려면 어떤 방법이 있을까요
- 해결됨[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
Interceptor 작업 중 질문드립니다.
동일하게 restaurant_repository에서 @Headers 를 통해 'accessToken' : 'true' 라는 map을 헤더에 넣어주었음에도 dio.dart에서는 해당 onRequest에서 header가 빈 map으로 나오는 현상이 발생합니다. url과 GET 요청이라는 정보는 제대로 들어갑니다. 혹시 무슨 문제인지 알고 계신가요?
- 해결됨[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
강의에서 Future 리턴타입 Map<String, dynamic>
안녕하세요? 강좌 섹션5 > 레스토랑상세페이지 구현단계에서build 의 FutureBuilder 의 builder 에서 아래와 같이 구현 되어있는데builder: (context, AsyncSnapshot<Map<String, dynamic>> snapshot) {아래와 같이 AsyncSnapshot<Map<String, dynamic>> 를 제거후 syntax error 따라다니면서 반환타입을 바꾸니 문제 없던데요..builder: (context, snapshot) {flutter 가 업그레이드 되면서 type safe 된거 같기도 한데 AsyncSnapshot<Map<String, dynamic>> 부분이 이해가 잘 안가는데요 부연 설명 가능할까요?
- 미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
로고 크기 지정이 안 되는 문제
안녕하세요 강사님. 다름이 아니라 아래 코드가 적용되지 않아서 글 남깁니다.Image.asset( 'asset/img/misc/logo.png', width: MediaQuery.of(context).size.width * (2 / 3), ),width에 그 어떠한 값을 넣어봐도 로고 크기가 변하지 않았습니다. 이에 아래 코드와 같이 width가 아닌 height 값을 지정해 보니 드디어 로고 크기가 변하기 시작하더군요.Image.asset( 'asset/img/misc/logo.png', height: 100, ),왜 width에 값을 넣었을 때는 로고 크기가 변하지 않았고, height에 값을 넣었을 때만 로고 크기가 변했는지 그 이유가 궁금합니다.
- 미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
서버 세팅 질문드립니다
npm i --force 후 npm run start:dev를 실행하면 사진과 같이 에러가 발생합니다. 파일에서 수정해야 할 부분이 있을까요?
- 미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
npm i 오류 질문드립니다.
npm i 명령어 실행 시 이런 오류가 발생하는데 혹시 해결방법이 있을까요? 그리고 android studio에서 node 명령어 수행 시 제대로 실행되지 않는 문제가 있는데 powershell을 통해 동일한 경로에서 실행하면 제대로 실행됩니다. 추가적으로 android studio에서 해주어야 하는 설정이 있을까요?
- 미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
widget의 크기를 수치로 설정하는 것
만약 UI를 구현하는데 있어서 SizedBox의 height나 혹은 다른 Widget의 크기를 pixel단위로 수치로 주게 되면 비율이 다른 기기에서 원하는 형태로 표현을 못하거나 높이가 낮은 기기의 경우 잘리는 현상이 생길 것 같습니다.혹시 일반적으로 앱을 구현할 때 이런 부분을 모두 MediaQuery.of(Context).size를 통해 비율로 구현하는 것이 옳은 방법일까요?
- 미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
프로바이더와 싱글톤의 차이
프로바이더를 보고 있다보니 싱글톤이 생각나는데, 둘 간의 차이가 있을까요? 있다면 어떤 차이가 있을 까요?
- 미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
go_router 소스 적용후부터 이상한 에러가 떠서요.
안녕하세요?해당 실습 소스 예제를 무한 반복하면서 기존에 몇번 끝까지 완성하고, 현재 반복으로 계속 공부해보고 있습니다. 최근에 안나던 에러가 나와서 질문 드립니다. 소스 문제가 아닌거 같아서요.-----------------------------------------ㅁ 개발환경~ Flutter 3.10.5~ Dart 3.0.5~ OS : Mac Ventura 13.4.1 (Apple M2)-----------------------------------------Error (Xcode): ../../../../.pub-cache/hosted/pub.dev/go_router-4.5.1/lib/src/router.dart:38:44: Error: The class 'NavigatorObserver' can't be used as a mixin because it isn't a mixin class nor a mixin.기존에 실습할 때는 잘 지나갔던 부분 같은데,실습이 잘 진행되다가, go_router 적용 후 부터 위 에러가 뜹니다.동영상 소스 버전인 4 버전으로 바꾸어서 해 봐도 똑 같네요.(go_router 설정은 4 버전으로)flutter clean 시도후에 다시 pub get 해도 똑같은 현상이고요.ㅁ 참고로, 기존에 실습 공부 때 끝까지 완성해서 잘 돌던 복사본을 꺼내서 돌려 보니 위와 똑같은 현상이 나왔습니다.ㅁ 참고로 강사님이 작성해서 git hub 에 올려 주신 [실제 본 소스 - actual] 다운 받아서 돌려 보아도 똑같은 현상이 나오네요.혹시 관련 에러에 대해 아시는 부분 있으시면 조언 부탁드립니다.
- 해결됨[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
StateNotifierProvider.family를 사용하고 싶습니다.
stateNotifierProvider.family를 사용하려고 하는데, notifier를 리턴하다보니 상태값을 어떻게 리턴해야하는지? 궁금합니다.
- 미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
플러터 splash화면 시간 질문
FutureOr<String?> redirectLogic(BuildContext context,GoRouterState state){ final UserModelBase? user = ref.read(userMeProvider); //로그인 중 final logginIn = state.location == '/login'; //회원가입 페이지 이동중인지 final joinIn = state.location == '/login/join'; //유저 정보가 없는데 //로그인중이면 그대로 로그인 페이지에 두고 //만약 로그인중이 아니라면 로그인 페이지로 이동 if(user == null && !joinIn){ return logginIn ? null : '/login'; } //회원가입 페이지로 이동중이라면 if(user==null && joinIn){ return '/login/join'; } //user가 null이 아님 //UserModel //사용자 정보가 있는상태면 //로그인 중이거나 현재 위치가 SplashScreen이면 //홈으로 이동 if(user is UserModel){ return logginIn || state.location == '/splash' ? '/' : null; } //UserModelError if(user is UserModelError){ return logginIn ? null : '/login'; } return null; }} 위의 로직에서 splash화면을 인스타그램처럼 1초 지속되도록 하고싶은데 혹시 방법이 있을까요?
- 미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
프로바이더질문
처음 데이터를 가지고올때 if(state is! CursorPagination){ await this.paginate(); } 위의 코드를 실행하는데만약 데이터가 없다면final resp = await repository.paginate( paginationParams: paginationParams );여기서 캐스팅 오류가납니다.혹시 따로 해결방법이있을까요?? 너무 어렵네요
- 미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
provider질문
void init(){ state is CursorPaginationLoading; }이런식으로 코드를 짜면 프로바이더 내용이 초기화 되는건가요?
- 해결됨[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
로그인버튼을 눌렀을때 refreshToken이 안뜹니다ㅠㅠ
안녕하세요! Dio로 Auth API 요청해보기 강의에서 11분50초쯤 알려주셧듯, 로그인버튼을 클릭했는데[VERBOSE-2:dart_vm_initializer.cc(41)] Unhandled Exception: DioError [DioErrorType.other]: SocketException: Connection refused (OS Error: Connection refused, errno = 61), address = 127.0.0.1, port = 64549 이렇게 에러가뜨면서 refreshToken이 안뜨는데 시뮬레이터 IP문제일까요..?
- 미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
nRequest Interceptor 작업하기 부분 storage 질문드립니다.
여기서 data.dart에 있는 storage를 사용하지 않고 새로 생성해서 사용하는 이유가 무엇인가요??class CustomIntercepter extends Interceptor { final FlutterSecureStorage storage; CustomIntercepter({required this.storage}); // 1) 요청을 보낼 때 @override void onRequest( RequestOptions options, RequestInterceptorHandler handler) async { print('[REQ] [${options.method}] ${options.uri}'); if (options.headers['accessToken'] == 'true') { options.headers.remove('accessToken'); final token = await storage.read(key: ACCESS_TOKEN_KEY); options.headers.addAll({'authorization': 'Bearer $token'}); } return super.onRequest(options, handler); } // 2) 응답을 받을 때 // 3) 에러가 났을 때 }
- 미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
tabbarview 사용 유무 차이
bottomnavigatorbar만 사용할때와 bottomnavigatorbar와 tabbarview를 사용하는데 physics: NeverScrollableScrollPhysics() 이 조건을 추가하는거랑 어차피 bottomnavigatorbar로만 화면 이동이 가능한데 두개의 차이점이 무엇인지 궁금합니다!
- 미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
수업 중 질문
provider로 pagination을 하는데 이렇게 전체 데이터를 불러오는 경우를 제외한카테고리 별로 불러오기 검색으로 불러오기위의 경우가 있을 때 보통 어떻게 하나요 같은 provider를 쓴다면 state를 초기화하고 prameter를 다르게 하여 불러오나요아니면 카테고리별 검색 별 provider를 따로 만들어서 불러오나요?
- 미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
sns 페이스북 로그인 이슈
안녕하세요. 강사님 페이스북 sns 로그인 기능을 추가하여앱 사용하고 있었습니다. 현재 안드로이드는 페이스북 로그인 사용 가능하도록,ios는 로그인 아이콘을 숨김 처리하여 사용 하지 못하게 막아 놓은 상태입니다. 이런 sns 로그인 기능의 경우 안드로이드, ios 동일하게사용하도록 아이콘을 오픈해야하는지와 플랫폼 정책이있는지 궁금합니다. 감사합니다.
- 해결됨[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
userMeProvider 연결하고 나서 로그인 문제
Authentication 마무리하기 편에서 onPressed: () async { ref .read(userMeProvider.notifier) .login(username: username, password: password);userMeProvider 프로바이더를 쓰고 나서 로그인 하면 로그인이 안되고에러 메세지에 WRONG_VERSION_NUMBER(tls_record.cc:242))이렇게 뜨는데 그냥 작성한 코드 중 어디가 틀린걸까요 ? ㅠㅠ