묻고 답해요
131만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
ShellRoute 실행 결과가 이상합니다 ..
선생님이랑 코드 똑같이 쓰고 라우트 위치도 맞는데 NestedScreen 가보면 이렇게 나옵니다.아래는 더러울 수도 있지만 코드 전체 첨부합니다. class NestedScreen extends StatelessWidget { final Widget child; NestedScreen({super.key, required this.child}); @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: Text(GoRouterState.of(context).matchedLocation), ), body: child, bottomNavigationBar: BottomNavigationBar( items: [ BottomNavigationBarItem( icon: Icon(Icons.home), label: 'home', ), BottomNavigationBarItem( icon: Icon(Icons.person), label: 'person', ), BottomNavigationBarItem( icon: Icon(Icons.notifications), label: 'notifications', ), ], ), ); } } // router.dart ShellRoute( builder: (context, state, child) { return NestedScreen(child: child); }, routes: [ GoRoute( path: 'nested/a', builder: (_, state) => NestedChildScreen(routeName: '/nested/a'), ), GoRoute( path: 'nested/b', builder: (_, state) => NestedChildScreen(routeName: '/nested/b'), ), GoRoute( path: 'nested/c', builder: (_, state) => NestedChildScreen(routeName: '/nested/c'), ), ], ),
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
riverpod 상태관리시에 궁금한점 질문드립니다.
안녕하세요 코팩님.상품검색 페이지를 작업했습니다.riverpod으로 상태관리를 하며 필터(검색조건)을 provider로 구현하였습니다.필터들은 stateProvider로 하였고검색데이터 list는 StateNotifierProvider(필터값들 watch중)로 선언하였습니다.기본적으로 필터가 변경될때 자동으로 재검색이 되고 있는데요. 검색결과 페이지에서 새로운 검색어를 넣고 다시 검색할 때 이슈가 있습니다.(pushReplacementNamed로 현재페이지를 다시 호출)사정상 검색어는 provider로 하지 않고 파라미터로 받고 있습니다. 필터프로바이더들을 초기화 하지 않으면 새로운검색결과에 조건이 또 타게되서 필터들을 초기화 해주고 싶은데요.필터를 초기화해주면 기존 리스트가 자동으로 watch중이라 재검색이 먼저 실행되어버립니다.invalidate도 마찬가지구요. 어쩔수없이 changeNotifierProvider를 써서 notifyListeners를 호출하지 않고 값을 변경하는 함수를 따로 만들어서 그걸 호출 해서 값을 초기화하고 pushReplacementNamed로 현재페이지를 검색어만 바꿔서 재호출 하는걸로 처리하고 넘어갔습니다. 이럴땐 어떻게 처리해야 할까요?기본적인 설계를 잘못한 건지 모르겠습니다 ㅠㅠ조언 부탁드립니다. ps. autoDispose를 걸어놔도 다음 페이지에서 해당 프로바이더를 사용하면 dispose가 되지 않고 상태값도 초기화없이 유지되는게 맞나요? 테스트해 보았는데 그렇게 처리되는 것처럼 보여서요. 긴글 읽어주셔사 감사합니다.
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
탭 간 상태 유지 관련 하여 문의 드립니다.
홈 리스트 화면 중간 정도 보다가 음식 탭으로 이동 해서 리스트 스크롤 후에 다시 홈 화면으로 탭 하면 홈 리스트가 처음 부터 보여 집니다. 음식 탭으로 이동 해도 처음부터 보여지는데 상태 유지 할 수 있는 방법에는 어떤게 있는지 궁금 해서 문의 드립니다. 현재 Go router 강의 중간 정도 진행했습니다.감사합니다.
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
NavigatorObserver
[에러코드]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.Could not build the application for the simulator.Error launching application on iPhone 15 Pro.[강의]섹션 15 GoRouter 프로젝트에 적용하기 Authentication 마무리하기 수강 완료 후 위와 같은 에러가 발생하는데... 어떻게 하면 해결 가능할지... 문의드립니다.
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
리스너 dispose 질문입니다
5분 15초 쯤에 ScrollController 의 리스너 dispose하고ScrollController 도 dispose 하시는데 질문이 3가지 있습니다.둘 중 하나라도 dispose를 안 하면 어떻게 되는 건가요?RestaurantScreen, DetailScreen 에서는 dispose를 안 했는데 여기에서 한 이유가 있을까요?모든 리스너들은 다 dispose를 해줘야 하는지입니다.
-
해결됨[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
아래 댓글에 답변 드립니다.
계속 질문드려 죄송합니다. 그리고 매번 답변 주셔서 진심으로 감사드립니다. 제가 위탁하여 가지고있는 2년 전 flutter와 firebase로 제작한 앱이 있습니다. 그런데 지금 제가 공부중이라 안드로이드 스튜디오로 열려고 하니 다양한 이유로 에뮬레이터에 구현이 안되더라고요, 일부 코드들은 지금은 안쓰는 것 같고, 코드 수정은 어찌어찌 제가 할 수 있을 것 같은데, 새플러터 프로젝트로 코드 복사하고, 야믈파일, 안드로이드, ios 일부 수정해야하는 파일을 복사해와도 실행이 안되는건 마찬가지였습니다. 이런때는 어떻게 해야할까요?; 해당 개발자에게 문의를 해봐도 안드로이드 환경설정은 어떻게 해줄 수가 없다고 하더라고요, 원본 파일에서 최대한 아무것도 바꾸지 않는게 좋다고 하는데, 열 수가 없습니다.
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
공부하다 궁금한 것이 있어 여쭤봅니다.
지금 저의 목표는 혼자서 앱하나를 온전히 만들어 출시, 유지보수까지 하는 건데요, 추천을 받고 중급 강의까지 여러번 반복하며 코드들을 연습하고 있습니다. 그런데 보통 개발자 1명이 앱을 제작할때 순서가 어떻게 될까요?중급강의 처럼 api, 백엔드를 먼저 설계해놓은 후 프런트를 개발 할까요? 막연하게 공부하기 전에는 프런트를 먼저 구현을 다 해놓은 후에 백엔드를 연결하는 것이 아닐까 했는데, 중급을 공부하다보니 그런것도 아닌것 같아서요, 실제 앱 개발에서는 어떤 방식과 순서로 개발하는지 궁금합니다.
-
미해결[코드팩토리] [중급] 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 is UserModelLoading){ return logginIn ? null : '/login'; } // // //user가 null이 아님 // // //UserModel // //사용자 정보가 있는상태면 // //로그인 중이거나 현재 위치가 SplashScreen이면 // //홈으로 이동 if(user is UserModel){ return logginIn || state.location == '/splash' ? '/' : null; } return null; }위와 같은 redirect 로직에서 처음final UserModelBase? user = ref.read(userMeProvider); 위와 같은 코드를 실행 할 떄 final userMeProvider = StateNotifierProvider<UserMeStateNotifier,UserModelBase?>((ref) { return UserMeStateNotifier(); }); class UserMeStateNotifier extends StateNotifier<UserModelBase?>{ UserMeStateNotifier() : super(UserModelLoading()) { get(); } Future<void> get() async{ //spalsh화면을 2초 보여주기 위한 스탑워치 await Future.delayed(Duration(milliseconds: 1800)); state = null; return; } Future<void> getMe(UserModel userModel) async { state = userModel; } }위의 코드에서 get 함수를 거치게 되는데 await를 걸어둔 delayed 로직이 다 끝나기도 전에 return을 해버려 splash 이미지가 다 뜨기도전에 로그인 화면으로 넘어갑니다 해결방법이 있을까요
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
GStateNotifier로 선언했는데, watch할때, provider명은 왜 다른가요?
class명을GStateNotifier로 만들었는데, 실제 사용할때는gStateNotifierProvider로 앞에 G대문자가 소문자가 되는 이유가 있나요? 강의 설명엔 뭘 써도 된다라고 하셨는데, 어떤 이름으로 쓰든, gStateNotifierProvider가 된다는것인지.이 부분이 명확하지 않아서 문의 드립니다.
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
코팩님 카톡 보고 질문 드립니다 (키키아빠) 로그인 로직 관련입니다.
https://creative-mulberry-987.notion.site/d7d8c7b88276435cb205429289974c6d?pvs=4 코팩님 키키아빠입니다. 코드 올려 두었습니다. 인프런 게시판 이용이 미숙해서 노션에 올렸습니다.
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
RestaurantRepository 생성에서 (String baseUrl} 변경
factory RestaurantRepository(Dio dio, {String url}) = _RestaurantRepository;이런식으로 baseUrl 대신 url을 넣으면, 에러가 발생하는데요.g.dart 파일을 지우고 다시 pub run을 해봐도, 동일하게 baseUrl로 생성이 되더라구요. 그러면서, 에러가 나오는데, 변경이 안되는 이유가 있나요?
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
[Restaurant Pagination 요청해보기]에서 토큰값을 갱신하게 넣었는데도, 401에러가 나옵니다
void checkToken() async { final refreshToken = await storage.read(key: REFRESH_TOKEN_KEY); final accessToken = await storage.read(key: ACCESS_TOKEN_KEY); final dio = Dio(); try { final resp = await dio.post('http://$ip/auth/token', options: Options( headers: { 'authorization': 'Bearer $refreshToken', }, ), ); await storage.write(key: ACCESS_TOKEN_KEY, value: resp.data['accessToken']); Navigator.of(context).pushAndRemoveUntil( MaterialPageRoute( builder: (_) => RootTab(), ), (route) => false, ); } catch(e) { Navigator.of(context).pushAndRemoveUntil( MaterialPageRoute( builder: (_) => LoginScreen(), ), (route) => false, ); } }[Restaurant Pagination 요청해보기] 내용 중에accessToken이 갱신이 안되서 401 에러가 난다고 하시고, 갱신하는 코드를 넣어서 잘 된다고 하셨는데, 저는 여전히 401 에러가 나옵니다.DioError [DioErrorType.response]: Http status error [401] 에러가 자세하게 나오질 않아서 무슨 에러인지 알수가 없네요. 어떤 문제인가요?
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
혹시 전체 프로젝트 최종 코드도 깃허브 레퍼지토리가 있을까요?
안녕하세요. 수준 높은 강의 너무 잘 보고 있습니다.혹시 전체 프로젝트 최종 코드도 깃허브 레퍼지토리가 있을까요?새로운 프로젝트로 연습 할 때 최종 코드를 참고해가면서 복습하고 싶은데 각 챕터별 보일러 프로젝트만 있는 것 같아서요.
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
죄송합니다. 오늘 마지막 질문 입니다^^;(해결됨)
나름 열심히 따라 갔는데, 또 결제하기 버튼 누르면 결제를 실패했다는 스냅카드만 계속 뜹니다. 그래서 print(e) 를 해서 원인을 물어보니,type 'Null' is not a subtype of type 'String' in type cast라고 나오는데요, 제가 오류를 못찾는 걸수도 있겠지만, 여러 영상을 다시 뒤로 샅샅이 찾아가며 원인을 찾는데 못찾겠습니다..왜 다음 페이지로 넘어가지 않을까요? null값 때문이라면 어떻게 처리를 해야 할까요?// order_provider.dartimport 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:level2/order/model/post_order_body.dart'; import 'package:level2/user/provider/basket_provider.dart'; import 'package:uuid/uuid.dart'; import '../model/order_model.dart'; import '../repository/order_repository.dart'; final orderProvider = StateNotifierProvider<OrderStateNotifier, List<OrderModel>>( (ref) { final repo = ref.watch(orderRepositoryProvider); return OrderStateNotifier( ref: ref, repository: repo, ); }, ); class OrderStateNotifier extends StateNotifier<List<OrderModel>> { final Ref ref; final OrderRepository repository; OrderStateNotifier({ required this.ref, required this.repository, }) : super([]); Future<bool> postOrder() async { try { final uuid = Uuid(); final id = uuid.v4(); final state = ref.read(basketProvider); final resp = await repository.postOrder( body: PostOrderBody( id: id, products: state .map( (e) => PostOrderBodyProduct( productId: e.product.id, count: e.count, ), ) .toList(), totalPrice: state.fold<int>( 0, (p, n) => p + (n.count * n.product.price), ), createdAt: DateTime.now().toString(), ), ); return true; } catch (e) { print(e); return false; } } } ------------------------------------------------------이것도 앱을 지웠다가 다시 까니까 갑자기 되네요;반복될 가능성도 없진 않지만, 실제로 앱을 구현할 경우 이 문제가 계속 반복될 경우 그때마다 지웠다 다시 깔았다를 반복할 수 없을것 같은데.. 일단 이 문제는 이렇게 해결하고 넘어가기로 하겠습니다.^^;
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
질문이 있습니다 ㅠ(해결됨)
계속 이부분에서 오류가 나는데, 오류 설명이 이렇습니다.어떻게 해결해야 할까요..lib/common/provider/go_router.dart:15:24:Error: The argument type 'String? Function(GoRouterState)' can't be assigned to the parameter type 'FutureOr<String?> Function(BuildContext, GoRouterState)?'.- 'GoRouterState' is from 'package:go_router/src/state.dart' ('../../AppData/Local/Pub/Cache/hosted/pub.dev/go_router-12.0.1/lib/src/state.dart').- 'BuildContext' is from 'package:flutter/src/widgets/framework.dart' ('/C:/src/flutter/packages/flutter/lib/src/widgets/framework.dart').redirect: provider.redirectLogic,^Restarted application in 587ms. ------------------------------------------------------위부분의 문제를 redirectLogic을 타고들어가 기존 제너릭 앞에 buildContext context를 넣어주니 오류는 사라졌습니다. 그런데 앱실행 후에 또 다른 문제가 발생했습니다;화면은 계속 이 상태에 머물러 있고, 에러는 이렇게 뜹니다. 이건 어떻게 해야할까요ㅠㅠ[ERROR:flutter/runtime/dart_vm_initializer.cc(41)]Unhandled Exception: DioException [bad response]: The request returned an invalid status code of 401.E/flutter (13865): #0 DioMixin.fetch.<anonymous closure> (package:dio/src/dio_mixin.dart:507:7)E/flutter (13865): #1 _RootZone.runUnary (dart:async/zone.dart:1661:54)E/flutter (13865): #2 FutureListener.handleError (dart:async/futureimpl.dart:174:22)E/flutter (13865): #3 Future._propagateToListeners.handleError (dart:async/future_impl.dart:852:47)E/flutter (13865): #4 Future._propagateToListeners (dart:async/future_impl.dart:873:13)E/flutter (13865): #5 Future._completeError (dart:async/future_impl.dart:649:5)E/flutter (13865): #6 SyncCompleter.completeError (dart:async/future_impl.dart:60:12)E/flutter (13865): #7 Completer.completeError (dart:async/futureimpl.dart:26:5)E/flutter (13865): #8 Future.any.onError (dart:async/future.dart:620:45)E/flutter (13865): #9 _RootZone.runBinary (dart:async/zone.dart:1666:54)E/flutter (13865): #10 FutureListener.handleError (dart:async/futureimpl.dart:171:22)E/flutter (13865): #11 Future._propagateToListeners.handleError (dart:async/future_impl.dart:852:47)E/flutter (13865): #12 Future._propagateToListeners (dart:async/future_impl.dart:873:13)E/flutter (13865): #13 Future._completeError (dart:async/future_impl.dart:649:5)E/flutter (13865): #14 Future._asyncCompleteError.<anonymous closure> (dart:async/future_impl.dart:739:7)E/flutter (13865): #15 microtaskLoop (dart:async/schedulemicrotask.dart:40:21)E/flutter (13865): #16 startMicrotaskLoop (dart:async/schedulemicrotask.dart:49:5)일부 서치글을 통해 에뮬레이터 앱을 지우고 새로 여니 로그인화면으로 넘어갔습니다! 이 문제는 해결됐습니다~
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
질문있습니다ㅠ
아래 화면을 구현했습니다. 그런데 재시작을 할 때마다, 아래와 같은 오류가 뜹니다. ======== Exception caught by widgets library =======================================================The following assertion was thrown while finalizing the widget tree:_PaginationListViewState<IModelWithId>.dispose failed to call super.dispose.dispose() implementations must always call their superclass dispose() method, to ensure that all the resources used by the widget are fully released.When the exception was thrown, this was the stack: #0 StatefulElement.unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:5513:7)#1 StatefulElement.unmount (package:flutter/src/widgets/framework.dart:5520:6)#2 ConsumerStatefulElement.unmount (package:flutter_riverpod/src/consumer.dart:578:11)#3 InactiveElements.unmount (package:flutter/src/widgets/framework.dart:1952:13)#4 InactiveElements.unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:1950:7)#5 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5349:14)#6 InactiveElements.unmount (package:flutter/src/widgets/framework.dart:1948:13)#7 InactiveElements.unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:1950:7)#8 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5349:14)#9 InactiveElements.unmount (package:flutter/src/widgets/framework.dart:1948:13)#10 InactiveElements.unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:1950:7)#11 SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:6420:14)#12 InactiveElements.unmount (package:flutter/src/widgets/framework.dart:1948:13)#13 InactiveElements.unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:1950:7)#14 SingleChildRenderObjectElement.visitChildren (package:flutter/src/widgets/framework.dart:6420:14)#15 InactiveElements.unmount (package:flutter/src/widgets/framework.dart:1948:13)#16 InactiveElements.unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:1950:7)#17 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5349:14)#18 InactiveElements.unmount (package:flutter/src/widgets/framework.dart:1948:13)#19 InactiveElements.unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:1950:7)#20 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5349:14)#21 InactiveElements.unmount (package:flutter/src/widgets/framework.dart:1948:13)#22 InactiveElements.unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:1950:7)#23 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5349:14)#24 InactiveElements.unmount (package:flutter/src/widgets/framework.dart:1948:13)#25 InactiveElements.unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:1950:7)#26 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5349:14)#27 InactiveElements.unmount (package:flutter/src/widgets/framework.dart:1948:13)#28 InactiveElements.unmount.<anonymous closure> (package:flutter/src/widgets/framework.dart:1950:7)#29 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5349:14)#30 InactiveElements.unmount (package:flutter/src/widgets/framework.dart:1948:13)#31 ListIterable.forEach (dart:_internal/iterable.dart:39:13)#32 InactiveElements.unmountAll (package:flutter/src/widgets/framework.dart:1961:25)#33 BuildOwner.lockState (package:flutter/src/widgets/framework.dart:2639:15)#34 BuildOwner.finalizeTree (package:flutter/src/widgets/framework.dart:3049:7)#35 WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:919:19)#36 RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:360:5)#37 SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1297:15)#38 SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:1227:9)#39 SchedulerBinding._handleDrawFrame (package:flutter/src/scheduler/binding.dart:1085:5)#40 _invoke (dart:ui/hooks.dart:170:13)#41 PlatformDispatcher._drawFrame (dart:ui/platform_dispatcher.dart:401:5)#42 _drawFrame (dart:ui/hooks.dart:140:31)
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
Select 실습에서 질문이요!
Select 실습중에final state = ref.watch(selectProvider.select((value)=>value.isSpicy));해당 코드에서 질문이 있습니다!불필요한 빌드를 막기위해 특정 변수만 watch를 하면서 특정 부분만 랜더링을 다시 하는 부분으로 제가 이해를 했습니다.근데 저렇게 할 경우, 변수별로 저렇게 select를 하면 나중에는 코드가 엄청 길어질 수 있을것 같은데, 코드를 가독성 좋게 관리할 수 있는 방법이 혹시 있을까요??
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
질문입니다.ㅠ
[ 질문1 ]7_query_parameter.dart 에서 ~of(context). 다음에 queryParameters가 자동으로 뜨지 않습니다. 6번의 pathPameters는 떠서 구현했는데, 이건 안뜨네요, 그래서 ~.uri.queryParameters로 하니까 떠서 일단 이걸로 선택해봤습니다. 그랬더니 화면이 조금 차이가 있었습니다.일단 코드입니다.import 'package:flutter/material.dart'; import 'package:go_router/go_router.dart'; import 'package:go_router_v7_actual/layout/default_layout.dart'; class QueryParameterScreen extends StatelessWidget { const QueryParameterScreen({super.key}); @override Widget build(BuildContext context) { return DefaultLayout( body: ListView( children: [ Text( 'Query Parameter : ${GoRouterState.of(context).uri.queryParameters}'), // /query_parameter?utm=google&source=123 // /query_parameter?name=codefactory&age=32 ElevatedButton( onPressed: () { context.push( Uri( path: '/query_param', queryParameters: { 'name': 'codefactory', 'age': '32', }, ).toString(), ); }, child: Text( 'Query Parameter', ), ), ], ), ); } }그리고 이건 화면인데요, title 뒤에 길게 이어진 text가 없습니다.그리고 버튼을 누를때마다 아래와 같은 페이지만 반복적으로 뜹니다.[ 질문2]go nest에서 네비게이션의 selectColor와 실제 선택이 일치하지 않습니다.ㅠㅠ 코드를 여러번 검토하며 뭐가 틀렸는지 수없이 봤는데, 못찾았습니다..
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
섹션 15 - GoRouter적용하기 부분 질문
질문 1번id: state.pathParameter~만 나오고id: state.params~는 나오지않고 에러만 뜨네요 질문2번redirect: provider.redirectLogic(state) 이렇게만 나오고redirect: provider.redirectLogic 입력하면 에러가 나옵니다
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
stata4가 build오류가 납니다.(수정됨)
state1번부터 5번까지는 실행이 되는데,4번만 입력하면 code_generation_provider.g.dart 파일에서 2개의 오류가 계속 발생합니다.왜그런지 여러번 확인했는데, 코드상의 문제는 없는 것 같습니다.g.dart 파일은 수정이 안된다고 하셨는데, 어떻게 수정을 해야할까요?ㅠ// code_generation_provider.dart@riverpod int gStateMultiply( GStateMultiplyRef ref, { required int number1, required int number2, }) { return number1 * number2; }//code_generation_provider.g.dart