월 26,400원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
레이아웃에 대해서 궁금한 질문!
안녕하세요. 공통 레이아웃으로 앱바, 네비게이션 등을 프롭스(?)로 받아서 하나의 레이아웃 파일로 여러 파일, 페이지에서 사용하는거랑타입별로 예를들어서 앱바있는 타입의 레이아웃, 앱바+바텀네비게이션 있는 타입의 레이아웃 등등... 이런식으로 파일을 여러개 레이아웃을 만들어놓고 사용하는거랑 뭔가 최적화 적으로 차이가 있을까요? 갑자기 궁금합니당
- 해결됨[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
강의에 적용된 디자인 패턴이 뭔가요??
flutter 앱을 유지보수하기 쉽게 개발하기 위해 디자인 패턴을을 쓰는데 아직까지 구분하는게 어렵습니다.혹시 강의에서도 디자인 패턴을 고려해서 앱을 만드셨는지 궁금해서 질문을 드립니다! 그리고 flutter 에 잘 맞는 디자인 패턴은 뭔지도 궁금합니다!!
- 미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
네스팅 방식으로 goRouter Go를 사용할때, 앱바타이틀이 정상적으로 표시되지 않는 문제
GoRouter 초반부를 듣고 있는데, 제목과 같이 앱바타이틀이 정상적으로 표시되지 않는 문제를 겪고 있습니다.Screen Three 로 이동했을때 앱바의 타이틀은/one/two/three 로 표기가 되나,뒤로가기를 눌렀을때 홈으로 이동할때까지 그 상태 그대로 /one/two/three 가 유지되다가 홈에서 / 로 표시가 됩니다.OneScreen, TwoScreen, ThreeScreen 별로 각각 텍스트로 one, two, three 라고 입력해서 확인해본결과,뒤로가기 할때마다 three 에서 출발해서 two, one 으로 화면에 잘 뜨는 것으로 보아 페이지 이동은 정상적으로 이루어지는 것 같습니다. 아래는 default_layout.dart 입니다.class DefaultLayout extends StatelessWidget { final Widget body; const DefaultLayout({ Key? key, required this.body, }) : super(key: key); @override Widget build(BuildContext context) { final router = GoRouter.of(context); return Scaffold( appBar: AppBar( title: Text( router.location, ), ), body: Padding( padding: const EdgeInsets.symmetric( horizontal: 16.0, ), child: body, ), ); } } main.dartvoid main() { runApp(_App()); } class _App extends StatelessWidget { _App({Key? key}) : super(key: key); final GoRouter _router = GoRouter( initialLocation: '/', routes: [ GoRoute( path: '/', builder: (context, state) => const HomeScreen(), routes: [ GoRoute( path: 'one', builder: (context, state) => const OneScreen(), routes: [ // http://.../one/two GoRoute( path: 'two', builder: (context, state) => const TwoScreen(), routes: [ // http://.../one/two/three GoRoute( path: 'three', builder: (context, state) => const ThreeScreen(), ), ], ) ], ), ], ), // http://..../one // http://..../two // GoRoute( // path: '/one', // builder: (context, state) => const OneScreen(), // ), ], ); @override Widget build(BuildContext context) { return MaterialApp.router( theme: ThemeData(useMaterial3: true), // uri string 을 상태 및 go router 에서 사용할 수 있는 형태로 변환해주는 함수(자동) routeInformationParser: _router.routeInformationParser, // 위에서 변경된 값으로 실제 어떤 route 를 보여줄지 정하는 함수(자동) routerDelegate: _router.routerDelegate, // route 정보를 전달하는 함수(자동) routeInformationProvider: _router.routeInformationProvider, ); } } home_screen.dartclass HomeScreen extends StatelessWidget { const HomeScreen({Key? key}) : super(key: key); @override Widget build(BuildContext context) { return DefaultLayout( body: Column( crossAxisAlignment: CrossAxisAlignment.stretch, mainAxisAlignment: MainAxisAlignment.center, children: [ ElevatedButton( onPressed: () { context.go('/one'); }, child: const Text('go to OneScreen'), ), ElevatedButton( onPressed: () { context.go('/one/two/three'); }, child: const Text('go to ThreeScreen'), ), ], ), ); } } 3_screen.dartclass ThreeScreen extends StatelessWidget { const ThreeScreen({Key? key}) : super(key: key); @override Widget build(BuildContext context) { return DefaultLayout( body: Column( children: const [Text('three')], ), ); } } 정도로 참고 코드를 올렸습니다.goRouter 버전은 4.2.2 로 강의의 버전과 맞춰서 진행중입니다.
- 미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
GoRouter return이 안됩니다.
final routeProvider = Provider<GoRouter>( (ref) { print('1 : routeProvider 실행'); final authState = ref.watch(authProvider); print('1 : authState is ${authState}'); print('------GoRouter return!!-------'); return GoRouter( initialLocation: '/', routes: authState.route, refreshListenable: authState, redirect: authState.redirect, ); }, ); 위에서 return GoRouter하는 순간 위와 같은 오류가 발생하네요...ㅠ몇 시간을 고민해도 도저히 모르겠습니다.복기하면서 나는 오류인데, 그 전에 강의 보면서 해놓은거랑 똑같이해도 이것만 오류가 나네요... 도와주세요
- 미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
UserModel 에서는 IModelWithId를 implements하지 않는 이유가 있나요?
pagination을 할때 사용할 모델들에 IModleWIthId를 implements 한다고 하셨는데, UserModel 에서는 어떤 이유가 있어서 하지 않으신건가요?
- 미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
서버쪽 /user/me api에서 에러가 나서 확인해보니..
서버쪽 bearer-token.guard.ts 쪽에서 토큰으로 유저정보 만드는 부분에 아래처럼 sub으로 유저정보를 검색하는데 sub이 user id이더라구요.. 그래서 user 값이 제대로 조회가 안되서 에러가 발생했었습니다.request.user = await this.userService.findByUsername(payload.sub);일단 payload.username으로 검색하게 하니 잘되는것 같습니다~
- 미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
[에러] GoRouter 적용, 401 에러가 뜹니다
안녕하세요/data big작성일 22.09.26 18:06 조회수 28GoRouter 프로젝트에 적용하기 / Authentication 마무리하기 강의 단계에서서버에서 401 Unauthorized 에러가 발생합니다. 라고 글이 검색되었는데, 저도 비슷합니다.다만 저는 로컬호스트/유저/미 로그를 클릭하면토큰이 없다고 나오고요,부랴부랴 포스트맨에서 로그인 포스트 해보면리프레시토큰/억세스토큰 잘 받아옵니다다만 그 이후에 auth/token을 하면 잘못된 토큰이라고 나오네요.저 역시 첫 에러는 user_me_repository.g.dart,두번째로 가리키는 곳은 user_me_provider 입니다final resp = await repository.getMe(); 네요강사님 코드와 일치하는 것 확인했고, 혹시나 싶어서강사님 코드 긁어서 붙여넣기도 해봤습니다.저 역시 아이폰 시뮬레이터에선 splash_screen에서 멈추고무한 프로그레스 인디케이터만 돌고 있습니다. 추가합니다(꼼수로 /splash가 아니라 /restaurant로 initialLocation 변경한 다음에미리 만들어놓은 로그아웃 탭으로 가서 로그아웃하고 다시 로그인 하니 되네요..그리고 다시 /splash 원상복구시키니 됩니다.다만 포스트맨에서는 여전히 잘못된 토큰이라고 나오네요.고라우터 버전은 ^4.4.2 으로 맞춰놓고 따라가고 있습니다) 또 추가합니다맨 위에서 언급한 다른 질문글과 에러 로그는 같은데,이런 식?으로 우회하면 되는 건가요? 그냥 순간 안맞는 경우가 있는 건가요?
- 미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
ref.read.update // state + 1
아래 두 코드 차이가 있나요?2번 코드처럼 사용해도 상관은 없는건가요?1. ref.read(numberProvider.notifier).update( (state) => state + 1, ); 2. ref.read(numberProvider.notifier).state = ref.read(numberProvider.notifier).state + 1;
- 미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
typedef itemBuilder 제네릭 관련 질문이 있습니다.
아래처럼 itemBuilder를 넣어봤는데요, Widget build(BuildContext context) { return PaginationListView( provider: restaurantNotifierProvider, itemBuilder: itemBuilder<RestaurantModel>); } Widget itemBuilder<T extends IModelWithId>(BuildContext context, int index, T t) { t as RestaurantModel; return GestureDetector( onTap: () { Navigator.of(context).push( MaterialPageRoute( builder: (_) { return RestaurantDetailScreen( id: t.id, ); }, ), ); }, child: RestaurantCard.fromModel( restaurantModel: t, ), ); } }아래와 같은 에러가 나옵니다type '(BuildContext, int, RestaurantModel) => Widget' is not a subtype of type '(BuildContext, int, IModelWithId) => Widget'근데, RestaurantModel implements IModelWithId라고 해주었으니 상속관계가 있는데 왜 subtype이 아니라는걸까요?
- 미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
[상태관리] Riverpod을 쓰신 이유가 있으신가요?
안녕하세요 상태관리 라이브러리 관하여 여쭤볼게 있습니다.상태관리 라이브러리가 많은데 그중 riverpod을 쓰시는 이유가 있으신가요?다른 상태관리 라이브러리 (Provider, Bloc, Get 등)을 사용해도 강의에 나온것과 같은 기능, 같은 패턴으로 구현할수 있나요?
- 미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
Dio 질문드립니다.!
Dio에 interceptor을 붙여서 토큰 만료일때 갱신을 해주는데, Future.wait 로 병렬적으로 요청할때 연속된 요청에 대해서는 어떻게 처리되나요?
- 미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
CursorPagination 캐스팅 관련 문의
죄송하지만, 어제 질문을 남겼는데 제가 제대로 궁금한 사항을 전달하지 못한 거 같아 다시 질문드립니다.paginate함수에서 왜 꼭 final pState = state as CursorPaginationFetchingMore<T>; 해주어야만 하는지 잘 이해를 못하겠습니다. 강의에서 처럼,final resp = await repository.paginate(paginationParams: paginationParams); if (state is CursorPaginationFetchingMore) { final pState = state as CursorPaginationFetchingMore<T>; // 기존 데이터에 새로운 데이터 추가 state = resp.copyWith( data: [ ...pState.data, ...resp.data, ], );이 아닌, final resp = await repository.paginate(paginationParams: paginationParams); if (state is CursorPaginationFetchingMore) { state as CursorPaginationFetchingMore<T>; // 기존 데이터에 새로운 데이터 추가 state = resp.copyWith( data: [ ...state.data, ...resp.data, ], );으로 하게 되면 왜 data가 자동완성이 안되는 걸까요? state의 상태를 CursorPaginationBase로만 인식을 해서 안되던데, CursorPaginationFetchingMore extends CursorPaginationBase를 했으니, state as CursorPagination<T>이라고 해도 .data를 인식해야 하는거 아닌가요?
- 미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
CursorPagination 캐시팅 관련 문의
paginate 함수에서, final pState = state as CursorPagination 하는 분에서요,state as CursorPagination 하면 state.data라고 자동완성이 안되던데 왜 그런가요?데이터타입을 CursorPaginationBase로만 인식하던데 as CursorPagination을하면 확실한 다운캐스팅에선 data가 인식 되어야 맞는거 아닌가요?
- 미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
AuthRepository 클래스 token() 함수는 Dead Code 아닌가요?
AuthRepository 클래스에서 token() 함수는 전혀 호출되지 않는거 같은데, Dead Code인가요? (Dead Code가 아니라면, 어디서 호출 되는지 설명 부탁드립니다) Dead Code 가 맞다면, 아래 2개 파일도 필요가 없어서 삭제해도 되는 걸까요?token_response.darttoken_response.g.dart
- 미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
Rating을 GET 요청할때 DioError가 발생합니다.
Dio로 Rating을 get요청하면 이런 에러가 뜨면서 데이터를 가죠오지 못합니다.. 하지만 Postman으로 get요청을 하면 잘 가져오는데 뭐가 문제인걸까요...
- 미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
Token 관련 질문 드립니다.
안녕하세요. 학습중 궁급해서 질문 드립니다. test@codefactory.ia:testtest 이 부분을 인코딩하고 포스트맨에서 로직 검사를 여러번 시험해보면서 username 즉 ID값을 다르게 변경해도 패스워드만 정확하게 맞다면 accessToken 과 refreshToken을 받을 수 있었습니다.Password부분 같이 값이 같아야 토큰을 받을 수 있는건데 ID값은 달라도 왜 토큰 값이 받아지는 거죠? 사진은 ID값을 다르게 해서 토큰을 받은 겁니다.
- 미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
수업의 내용은 아니지만 궁금해서 여쭤봅니다.
저는 이런식으로 계속해서 뜨는데 이것만 끄는 방법이 있을까요?필요한 정보만 보고 싶은데 textfield의 깜빡깜빡하는 부분까지도 다 뜨는 것 같아서요. ㅠㅠ 수업내용은 선생님께서 잘 알려주셔서 너무 좋아요!! 그리고 현재 안드로이드로 배우고 있는데, 선생님처럼 Appbar의 title이 이처럼 다음 페이지로 이동시 살짝 오른쪽으로 가는데 어떻게 설정하면 될까요??
- 미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
refresh 토큰 재발급 요청에 대해서
리프래시 토큰이 기간 만료되었다는 거는 어플 쪽에서 확인을 해서 재발급 요청을 보내야 하나요?예를 들어서 페이로드에 있는 만료일을 어플 백그라운드에서 계속 체크하면서 만료되면 재발급 요청을 서버쪽에 보내는 건지 궁금 합니다.액세스토큰이 만료일 때 리프레시 토큰까지 만료이면 바로 로그아웃인데 리프래시 토큰만 만료인 경우는 어떻게 검증하는지 궁금합니다
- 미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
_App 클래스가 ConsumerWidget을 상속 받으면 에러가 생깁니다
안녕하세요, 시간이 없어 어떻게든 꾸역꾸역 듣고 있는데도 많은 도움을 얻고 있습니다._App 클래스에서 MaterialApp 위젯을 .router 생성자로 부르고 _App 클래스가 ConsumerWidget를 상속 받게끔 코드를 고치니 에러가 발생합니다.가장 위에 보이는 에러는 이렇습니다.다시 ConsumerWidget에서 StatelessWidget을 상속 받게 하니 에러는 발생하지 않습니다. .router 생성자를 빼도 에러가 발생하는 것을 보아 리버팟과 관련된 이슈인 듯 합니다.저는 강의가 나온 후 조금 지난 시점에 듣기 시작해서 이미 리버팟이 2.1.대 버전일 때 시작했는데 강의와 시차가 있어 발생하는 문제일까요?강사님 아니더라도 해결하신 분이 있다면 조언 부탁드립니다.감사합니다.에러 메시지 및 스택은 다음과 같습니다.[VERBOSE-2:dart_vm_initializer.cc(41)] Unhandled Exception: 'package:flutter/src/widgets/framework.dart': Failed assertion: line 2609 pos 20: '_debugCurrentBuildTarget == context': is not true.#0 AssertionError.doThrowNew (dart:core-patch/errors_patch.dart:51:61)#1 AssertionError.throwNew (dart:core-patch/errors_patch.dart:40:5)#2 BuildOwner.buildScope.<anonymous closure> (package:flutter/src/widgets/framework.dart:2609:20)#3 BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2613:12)#4 RenderObjectToWidgetAdapter.attachToRenderTree (package:flutter/src/widgets/binding.dart:1110:13)#5 WidgetsBinding.attachRootWidget (package:flutter/src/widgets/binding.dart:945:7)#6 WidgetsBinding.scheduleAttachRootWidget.<anonymous closure> (package:flutter/src/widgets/binding.dart:925:7)#7 Timer._createTimer.<anonymous closure> (dart:async-patch/timer_patch.dart:18:15)#8 Timer.runTimers (dart:isolate-patch/timer_impl.dart:398:19)#9 _Ti<…>======== Exception caught by widgets library =======================================================The following assertion was thrown building UncontrolledProviderScope:Got a stack frame from package:stack_trace, where a vm or web frame was expected. This can happen if FlutterError.demangleStackTrace was not set in an environment that propagates non-standard stack traces to the framework, such as during tests.'package:flutter/src/foundation/stack_frame.dart':Failed assertion: line 192 pos 7: 'line != '===== asynchronous gap ===========================''The relevant error-causing widget was: UncontrolledProviderScope UncontrolledProviderScope:file:///Users/letmebelazy/Development/flutter/.pub-cache/hosted/pub.dartlang.org/flutter_riverpod-2.1.1/lib/src/framework.dart:250:12When the exception was thrown, this was the stack: #2 StackFrame.fromStackTraceLine (package:flutter/src/foundation/stack_frame.dart:192:7)#3 MappedIterator.moveNext (dart:_internal/iterable.dart:391:20)#4 WhereTypeIterator.moveNext (dart:_internal/iterable.dart:869:20)#5 new GrowableList.ofOther (dart:core-patch/growable_array.dart:202:26)#6 new GrowableList.of (dart:core-patch/growablearray.dart:152:26)#7 new List.of (dart:core-patch/array_patch.dart:51:28)#8 Iterable.toList (dart:core/iterable.dart:470:12)#9 StackFrame.fromStackString (package:flutter/src/foundation/stack_frame.dart:93:10)#10 StackFrame.fromStackTrace (package:flutter/src/foundation/stack_frame.dart:78:12)#11 FlutterErrorDetails.debugFillProperties (package:flutter/src/foundation/assertions.dart:712:57)#12 DiagnosticableNode.builder.<anonymous closure> (package:flutter/src/foundation/diagnostics.dart:2940:17)#13 DiagnosticableNode.builder (package:flutter/src/foundation/diagnostics.dart:2943:8)#14 _FlutterErrorDetailsNode.builder (package:flutter/src/foundation/assertions.dart:1289:56)#15 DiagnosticableNode.emptyBodyDescription (package:flutter/src/foundation/diagnostics.dart:2954:77)#16 DiagnosticsNode.toJsonMap.<anonymous closure> (package:flutter/src/foundation/diagnostics.dart:1632:13)#17 DiagnosticsNode.toJsonMap (package:flutter/src/foundation/diagnostics.dart:1661:6)#18 WidgetInspectorService._nodeToJson (package:flutter/src/widgets/widget_inspector.dart:1606:18)#19 WidgetInspectorService._reportStructuredError (package:flutter/src/widgets/widget_inspector.dart:937:44)#20 FlutterError.reportError (package:flutter/src/foundation/assertions.dart:1184:14)#21 _debugReportException (package:flutter/src/widgets/framework.dart:6493:16)#22 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:4887:9)#23 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5050:11)#24 Element.rebuild (package:flutter/src/widgets/framework.dart:4604:5)#25 ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:4859:5)#26 StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:5041:11)#27 ComponentElement.mount (package:flutter/src/widgets/framework.dart:4853:5)... Normal element mounting (7 frames)#34 UncontrolledProviderScopeElement.mount (package:flutterriverpod/src/framework.dart:309:11)... Normal element mounting (9 frames)#43 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3863:16)#44 Element.updateChild (package:flutter/src/widgets/framework.dart:3592:18)#45 RenderObjectToWidgetElement._rebuild (package:flutter/src/widgets/binding.dart:1195:16)#46 RenderObjectToWidgetElement.mount (package:flutter/src/widgets/binding.dart:1164:5)#47 RenderObjectToWidgetAdapter.attachToRenderTree.<anonymous closure> (package:flutter/src/widgets/binding.dart:1111:18)#48 BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2605:19)#49 RenderObjectToWidgetAdapter.attachToRenderTree (package:flutter/src/widgets/binding.dart:1110:13)#50 WidgetsBinding.attachRootWidget (package:flutter/src/widgets/binding.dart:945:7)#51 WidgetsBinding.scheduleAttachRootWidget.<anonymous closure> (package:flutter/src/widgets/binding.dart:925:7)(elided 6 frames from class AssertionError, class RawReceivePortImpl, class _Timer, and dart:async-patch)============================================================================================================ Exception caught by widgets library =======================================================The following assertion was thrown building ProviderScope(state: ProviderScopeState#5859c):'package:flutter/src/widgets/framework.dart': Failed assertion: line 4606 pos 14: 'owner!._debugCurrentBuildTarget == this': is not true.Either the assertion indicates an error in the framework itself, or we should provide substantially more information in this error message to help you determine and fix the underlying cause.In either case, please report this assertion by filing a bug on GitHub: https://github.com/flutter/flutter/issues/new?template=2_bug.mdThe relevant error-causing widget was: ProviderScope ProviderScope:file:///Users/letmebelazy/StudioProjects/code_factory/lib/main.dart:9:5When the exception was thrown, this was the stack: #2 Element.rebuild.<anonymous closure> (package:flutter/src/widgets/framework.dart:4606:14)#3 Element.rebuild (package:flutter/src/widgets/framework.dart:4609:6)#4 ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:4859:5)#5 ComponentElement.mount (package:flutter/src/widgets/framework.dart:4853:5)#6 UncontrolledProviderScopeElement.mount (package:flutterriverpod/src/framework.dart:309:11)... Normal element mounting (9 frames)#15 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3863:16)#16 Element.updateChild (package:flutter/src/widgets/framework.dart:3592:18)#17 RenderObjectToWidgetElement._rebuild (package:flutter/src/widgets/binding.dart:1195:16)#18 RenderObjectToWidgetElement.mount (package:flutter/src/widgets/binding.dart:1164:5)#19 RenderObjectToWidgetAdapter.attachToRenderTree.<anonymous closure> (package:flutter/src/widgets/binding.dart:1111:18)#20 BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2605:19)#21 RenderObjectToWidgetAdapter.attachToRenderTree (package:flutter/src/widgets/binding.dart:1110:13)#22 WidgetsBinding.attachRootWidget (package:flutter/src/widgets/binding.dart:945:7)#23 WidgetsBinding.scheduleAttachRootWidget.<anonymous closure> (package:flutter/src/widgets/binding.dart:925:7)(elided 6 frames from class AssertionError, class RawReceivePortImpl, class _Timer, and dart:async-patch)============================================================================================================ Exception caught by widgets library =======================================================The following assertion was thrown attaching to the render tree:'package:flutter/src/widgets/framework.dart': Failed assertion: line 4606 pos 14: 'owner!._debugCurrentBuildTarget == this': is not true.Either the assertion indicates an error in the framework itself, or we should provide substantially more information in this error message to help you determine and fix the underlying cause.In either case, please report this assertion by filing a bug on GitHub: https://github.com/flutter/flutter/issues/new?template=2_bug.mdWhen the exception was thrown, this was the stack: #2 Element.rebuild.<anonymous closure> (package:flutter/src/widgets/framework.dart:4606:14)#3 Element.rebuild (package:flutter/src/widgets/framework.dart:4609:6)#4 ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:4859:5)#5 StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:5041:11)#6 ComponentElement.mount (package:flutter/src/widgets/framework.dart:4853:5)#7 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3863:16)#8 Element.updateChild (package:flutter/src/widgets/framework.dart:3592:18)#9 RenderObjectToWidgetElement._rebuild (package:flutter/src/widgets/binding.dart:1195:16)#10 RenderObjectToWidgetElement.mount (package:flutter/src/widgets/binding.dart:1164:5)#11 RenderObjectToWidgetAdapter.attachToRenderTree.<anonymous closure> (package:flutter/src/widgets/binding.dart:1111:18)#12 BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2605:19)#13 RenderObjectToWidgetAdapter.attachToRenderTree (package:flutter/src/widgets/binding.dart:1110:13)#14 WidgetsBinding.attachRootWidget (package:flutter/src/widgets/binding.dart:945:7)#15 WidgetsBinding.scheduleAttachRootWidget.<anonymous closure> (package:flutter/src/widgets/binding.dart:925:7)(elided 6 frames from class AssertionError, class RawReceivePortImpl, class _Timer, and dart:async-patch)====================================================================================================
- 해결됨[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
이번 플러터와 다트 업데이트에서
이번 다트 업데이트에서플러터와 다트가 업데이트가 되면서여러 기능이 생긴 걸로 아는데다트에서 Pattern Matching 이란 기능이 도입 된 것으로 압니다.반환 값이 여러 타입일 수 있다는 걸로 해석을 했는데정확히 무슨 기능이며 어디에 활용할 수 있을까요?Json 직렬화 혹은 역직렬화에 많이 활용될까요?