월 24,200원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결Flutter 중급 1편 - 클린 아키텍처
sealed class 적용 시...
마지막에 올려주신 강의를 보고 freezed를 sealed class로 변경하여 적용하는 부분을 복습 중 입니다. 영상에서 event부분을 sealed class로 변경하셨는데,state 부분은 어떻게 변경이 되야되는건지 잘 모르겠는데 간단히 설명 해주실수 있을까요? ^^;
- 미해결Flutter 중급 1편 - 클린 아키텍처
클린 아키텍처 질문
안녕하세요. 이미지 검색 앱만들기 파트를 다 보고 몇가지 의문점이 생겨 질문 올립니다.클린아키텍처의 레이어를 보면 RepositoryImpl는 Data 레이어, Repository(추상클래스)는 Domain 레이어로 정의 되어있는데, RepositoryImpl와 Repository의 레이어 단계나 폴더구조를 다르게 가져가는 이유가 있을까요?DI 를 Spring 처럼 어노테이션 같은 것을 이용해 별도의 코드를 작성하지 않고 하는 방법은 없나요?
- 미해결Flutter 중급 1편 - 클린 아키텍처
sealed class 데이터 접근
38 강의 내용 관련입니다. import 'package:json_annotation/json_annotation.dart'; import 'package:freezed_annotation/freezed_annotation.dart'; import 'package:note_app/domain/util/order_type.dart'; part 'note_order.freezed.dart'; @freezed abstract class NoteOrder with _$NoteOrder { const factory NoteOrder.title(OrderType orderType) = NoteOrderTitle; const factory NoteOrder.date(OrderType orderType) = NoteOrderDate; const factory NoteOrder.color(OrderType orderType) = NoteOrderColor; }위의 코드는 타입 매칭을 위한 거기 때문에 아래와 같이 dart 에서 지원하는 sealed 클래스를 사용하는 방법으로 고쳤습니다. import 'package:note_app/domain/util/order_type.dart'; sealed class NoteOrder<T> { const factory NoteOrder.title(OrderType orderType) = NoteOrderTitle; const factory NoteOrder.date(OrderType orderType) = NoteOrderDate; const factory NoteOrder.color(OrderType orderType) = NoteOrderColor; } class NoteOrderTitle<T> implements NoteOrder<T> { final OrderType orderType; const NoteOrderTitle(this.orderType); } class NoteOrderDate<T> implements NoteOrder<T> { final OrderType orderType; const NoteOrderDate(this.orderType); } class NoteOrderColor<T> implements NoteOrder<T> { final OrderType orderType; const NoteOrderColor(this.orderType); } order_section.dart 에서 Radio<NoteOrder>( value: NoteOrder.title(noteOrder.orderType), groupValue: noteOrder, onChanged: (NoteOrder? value) { onOrderChanged(NoteOrder.title(noteOrder.orderType)); }, activeColor: Colors.white, ),dart 지원 sealed 클래스를 사용하면 noteOrder.orderType에 접근이 안 되는데 어떻게 수정해야 할까요?
- 해결됨Flutter 중급 1편 - 클린 아키텍처
서버에서 데이터를 가져와서 사용하는 경우...
서버에서 데이터를 가져와 앱에 로드 및 업데이트 하는 과정에서 질문이 생겼습니다 ^^;"서버에서 데이터-> 로컬 db에 저장 -> 앱에서 사용""데이터 업데이트 -> 서버로 update request ->서버에서 데이터 request -> 로컬 db를 업데이트" 하는 코드에서내부 db에서 데이터를 가져오거나 업데이트하는 부분은 datasource 영역으로 이해가 되는데서버에서 데이터를 request하는 코드들도 datasource의 영역이라고 봐야할까요?
- 미해결Flutter 중급 1편 - 클린 아키텍처
뷰/뷰모델 작성 질문
강의를 수강하며 클린 아키텍쳐라는 개념을 처음 사용하다보니 미숙한 부분이 많다보니 질문이 많아지는 것 같습니다.^^; 페이지간 이동이 아닌, 하나의 페이지안에서 일부 위젯들만 변경되거나 노출/숨김되는 경우, 그러나 기능적으로는 분명한 차이가 있을 때, 뷰/뷰모델 작성은 어떻게 나누어서 하면 될까요?간단한 예를 들어보면 같은 배경에서 중앙에 배치 되는 위젯들만 PageScroll 또는 숨김/노출되는 상황입니다.첫 진입 -> 중앙에 시작 버튼 노출시작버튼 클릭 시 -> 시작 버튼 숨김/ 중앙에 비디오 선택창 노출비디오 선택 시 -> 비디오 선택창 숨김/비디오 플레이어 노출비디오 종료 시 -> 비디오 플레이오 숨김/ 다시보기 버튼 노출위젯의 배치로만 보았을 때는 1개의 view에 여러개의 component가 있는 형태이지만,기능적으로 구분하면 시작/비디오선택/비디오플레이/다시하기 이런식으로 4개의 view로도 구분할 수 있는 것 같아보입니다.강사님께서는 이럴 경우 어떤식으로 코드를 작성하시는지 궁금합니다.
- 미해결Flutter 중급 1편 - 클린 아키텍처
freezed JsonKey 사용 예시 공유
import 'package:freezed_annotation/freezed_annotation.dart'; part 'photo.freezed.dart'; part 'photo.g.dart'; @freezed class Photo with _$Photo { factory Photo({ required int id, required String tags, @JsonKey(name: 'previewURL') required String previewUrl, }) = _Photo; factory Photo.fromJson(Map<String, dynamic> json) => _$PhotoFromJson(json); }
- 미해결Flutter 중급 1편 - 클린 아키텍처
아이폰에서 APP 실행 안되는 현상
안녕하세요.맥북에서 Android Studio와 아이폰간에 USB 케이블을 연결하여 앱 실행을 하면 아이폰에 Flutter APP 아이콘이 생깁니다.그리고 USB 케이블이 연결된 상태에서는 화면이 활성화되어 있을 때에는 앱 실행이 잘 됩니다.그런데 USB 케이블을 제거하고 APP을 실행하면 실행이 안됩니다.이 문제를 해결하려면 어떤 조치를 해야 할까요?
- 미해결Flutter 중급 1편 - 클린 아키텍처
Provider
강의에서 이야기해주신 것 처럼 여러개의 Provider를 사용하기위해 MultiProvider를 사용하게되는데요. 이럴 때 일부 Provider가 일부 자식위젯에서만 사용될 경우해당 자식 위젯에서만 선언하는 것과 최상위에 MultiProvider내에 전부 선언해서 사용하는 것 중 어떤 것을 선호하시나요?그리고 왜 그런지 알 수 있을까요?
- 해결됨Flutter 중급 1편 - 클린 아키텍처
모델 클래스 작석 시 nullable
json to dart 모델 작성시에nullable 보다 late final로 선언하는 것을 더 선호하신다고 했는데, 이유가 있을까요?
- 미해결Flutter 중급 1편 - 클린 아키텍처
데이터가 수정되거나 추가될때 리스트를 최신화하는 부분의 질문입니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 클린아키텍쳐를 구현중인데요 노트를 수정하는 플로우에서viewModel -> useCase.update -> repository.update -> remoteDatasource.update 의 과정을 거치고 노트리스트 조회의 플로우를 생각해보면viewModel -> useCase.getList -> repository.getList -> remoteDatasource.getLIst 처럼 같은 과정을 거치게 됩니다.updateapi를 성공했다면 리스트화면으로 돌아올때 데이터 최신화를 위해 다시한번 조회하는 의미없는 리소스를 없애고싶습니다. 혹은 화면 A,B에서 같은리스트를 보여주는 상황이라면 update 성공 하고나서 A,B화면에 어떤방식으로 notify를 해줄 수 있을까요? 클린아키텍쳐의 구조를 구현하기 전에는 SingleTon으로 구현된 Repository에서 stream을 열어서 viewModelA와 viewModelB 에서 같은 repository의 stream을 구독해서 state를 바꿔주는 방식으로 했는데 usecase를 사용하려고하니 해당구조는 어려움이 생겨서 어떻게 할지 고민하다가 질문 드립니다!
- 미해결Flutter 중급 1편 - 클린 아키텍처
32강 질문 있습니다.
Navigator.push 에서 리턴받는 불리언값은 어떻게 정해지는것인가요?editnote init()에서 navigator.pop(context, true)에서 넘겨준 트루를 리턴받는 것인가요? 저는 이렇게 이해 했습니다.노트스크린(홈)에서 화면 푸시를 하면 edit페이지로 이동하고스트림으로 save 노트 이벤트를 상시 대기하다가 이벤트가 발생하면 true값과 동시에 pop을 하고 노트스크린(홈)에서 isSave에 pop에서 넘겨준 true를 리턴받고 if(isSaved !=null && isSaved){ viewModel.onEvent(NotesEvent.loadNotes()); } 을 수행하여 홈을 리로드하여 새로운 데이터를 받아주는것이라고 생각했습니다. 이게 맞을까요?이렇게되면 홈에서의 await Navigator.push()는 다음페이지에서 넘어갔다가 pop되는 것을 기다리는 await인가요? 아니면 무엇인가요?
- 미해결Flutter 중급 1편 - 클린 아키텍처
noteRepository 추상클래스 테스트에 관한 질문입니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 클린아키텍쳐를 열심히 학습중인데요 추상클래스(noteRepository)를 만드는 이유가 테스트가 원활하게 가능하게 추상클래스를 만든다고 했는데그러면 테스트코드를 작성할때 추상클래스(noteRepository)에 대한 테스트와 구현체 클래스(noteRepositoryImpl)에 대한 테스트를 각각 작성하는게 좋은 방법일까요? 그렇다면 추상클래스는 메서드만 정의되어있는 상태인데 어떤방식으로 테스트코드를 작성해야할까요?
- 미해결Flutter 중급 1편 - 클린 아키텍처
프로바이더 위치 질문
마지막에 main 함수는Provider 설정 이후, RunApp 함수가 실행이 되는 걸로 보입니다.만약 Provider 초기화시 외부 DB와 통신하는 등의 통신시간이 길어진다면... runApp 이 실행되기 전이라서 어플이 동작하지 않을 수 있나요?
- 미해결Flutter 중급 1편 - 클린 아키텍처
폴더 구조에 대해 궁금합니다.
섹션 1, 14번 강의를 듣던중 궁금한점이 생겨 질문드립니다.강의에서는 presentation/home/components 구조로 폴더를 작성하셨는데, 만약 home_screen.dart 파일에서 바텀 네비게이션을 제공하고, 바텀네이게이션에는 마이페이지, 홈페이지, 검색페이지 등등 과 같은 홈페이지와 그 성격이 전혀 다른 페이지로 이동할수 있는 버튼들이 존재하는 경우라면home/components 폴더에 마이페이지, 홈페이지 등 파일 혹은 폴더를 집어넣는다.home 폴더에 다 집어넣는것이 아니라 presentation 폴더에 my_page, search_page 등 폴더를 만들고 각 폴더에 맞는 성격의 파일 및 컴포넌트를 관리한다.어느것이 바람직 할까요? 그리고 retrofit, json_serializable을 사용할때 저희가 작성하는 dart 파일과 generator가 생성하는 g.dart 파일은 각각 도메인 레이어, 데이터 레이어라고 보면 맞는건가요?
- 미해결Flutter 중급 1편 - 클린 아키텍처
freezed 파일 생성하기 위해 build_runner build 시 NullThrownError 발생
질문은 아니고 해결 방법 공유 드립니다.build_script_generate/bootstrap.dart:76:40: Error: Method not found: 'NullThrownError'. final error = e[0] as Object? ?? NullThrownError();위 에러가 발생하는 경우 https://pub.dev/ 에서 사용하는 라이브러리들을 검색해서 버전들을 최신으로 맞춰주시면 됩니다.발생 원인은 NullThrownError 가 Dart 2.14 이후에 제거되었는데 예전 버전들에서 저 메서드를 사용하려고 하니 발생하는 것이 아닐까 싶습니다.
- 미해결Flutter 중급 1편 - 클린 아키텍처
DI 적용 provider 에러
아래와 같은 에러가 나서 질문 드립니다. Performing hot restart... Syncing files to device iPhone 13 Pro... Restarted application in 234ms. [VERBOSE-2:dart_vm_initializer.cc(41)] Unhandled Exception: Bad state: Tried to read a provider that threw during the creation of its value. The exception occurred during the creation of type HomeViewModel. ══╡ EXCEPTION CAUGHT BY PROVIDER ╞═══════════════════════════════ The following ProviderNotFoundException was thrown: Error: Could not find the correct Provider<PhotoApiRepositoryImpl> above this _InheritedProviderScope<GetPhotosUseCase?> Widget This happens because you used a `BuildContext` that does not include the provider of your choice. There are a few common scenarios: - You added a new provider in your `main.dart` and performed a hot-reload. To fix, perform a hot-restart. - The provider you are trying to read is in a different route. Providers are "scoped". So if you insert of provider inside a route, then other routes will not be able to access that provider. - You used a `BuildContext` that is an ancestor of<…> ======== Exception caught by widgets library ======================================================= The following ProviderNotFoundException was thrown building HomeScreen(dirty, dependencies: [_InheritedProviderScope<HomeViewModel?>], state: _HomeScreenState#f4eba): Error: Could not find the correct Provider<PhotoApiRepositoryImpl> above this _InheritedProviderScope<GetPhotosUseCase?> Widget This happens because you used a `BuildContext` that does not include the provider of your choice. There are a few common scenarios: - You added a new provider in your `main.dart` and performed a hot-reload. To fix, perform a hot-restart. - The provider you are trying to read is in a different route. Providers are "scoped". So if you insert of provider inside a route, then other routes will not be able to access that provider. - You used a `BuildContext` that is an ancestor of the provider you are trying to read. Make sure that _InheritedProviderScope<GetPhotosUseCase?> is under your MultiProvider/Provider<PhotoApiRepositoryImpl>. This usually happens when you are creating a provider and trying to read it immediately. For example, instead of: ``` Widget build(BuildContext context) { return Provider<Example>( create: (_) => Example(), // Will throw a ProviderNotFoundError, because `context` is associated // to the widget that is the parent of `Provider<Example>` child: Text(context.watch<Example>().toString()), ); } ``` consider using `builder` like so: ``` Widget build(BuildContext context) { return Provider<Example>( create: (_) => Example(), // we use `builder` to obtain a new `BuildContext` that has access to the provider builder: (context, child) { // No longer throws return Text(context.watch<Example>().toString()); } ); } ``` If none of these solutions work, consider asking for help on StackOverflow: https://stackoverflow.com/questions/tagged/flutter The relevant error-causing widget was: HomeScreen HomeScreen:file:///Users/seongjin/Desktop/oliver/programming/Flutter/image_search/lib/main.dart:32:19 When the exception was thrown, this was the stack: #0 Provider._inheritedElementOf (package:provider/src/provider.dart:343:7) #1 Provider.of (package:provider/src/provider.dart:293:30) #2 new ProxyProvider.<anonymous closure> (package:provider/src/proxy_provider.dart:162:22) #3 _CreateInheritedProviderState.value (package:provider/src/inherited_provider.dart:767:36) #4 _InheritedProviderScopeElement.value (package:provider/src/inherited_provider.dart:590:33) #5 Provider.of (package:provider/src/provider.dart:303:37) #6 ReadContext.read (package:provider/src/provider.dart:649:21) #7 viewModels.<anonymous closure> (package:image_search/data/di/provider_setup.dart:40:50) #8 _CreateInheritedProviderState.value (package:provider/src/inherited_provider.dart:736:36) #9 _InheritedProviderScopeElement.value (package:provider/src/inherited_provider.dart:590:33) #10 Provider.of (package:provider/src/provider.dart:303:37) #11 WatchContext.watch (package:provider/src/provider.dart:693:21) #12 _HomeScreenState.build (package:image_search/presentation/home/home_screen.dart:44:31) #13 StatefulElement.build (package:flutter/src/widgets/framework.dart:5198:27) #14 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5086:15) #15 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5251:11) #16 Element.rebuild (package:flutter/src/widgets/framework.dart:4805:7) #17 ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:5068:5) #18 StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:5242:11) #19 ComponentElement.mount (package:flutter/src/widgets/framework.dart:5062:5) ... Normal element mounting (24 frames) #43 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3971:16) #44 MultiChildRenderObjectElement.inflateWidget (package:flutter/src/widgets/framework.dart:6570:36) #45 MultiChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:6582:32) ... Normal element mounting (178 frames) #223 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3971:16) #224 MultiChildRenderObjectElement.inflateWidget (package:flutter/src/widgets/framework.dart:6570:36) #225 MultiChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:6582:32) ... Normal element mounting (472 frames) #697 _InheritedProviderScopeElement.mount (package:provider/src/inherited_provider.dart:411:11) ... Normal element mounting (7 frames) #704 SingleChildWidgetElementMixin.mount (package:nested/nested.dart:222:11) ... Normal element mounting (7 frames) #711 _NestedHookElement.mount (package:nested/nested.dart:187:11) ... Normal element mounting (7 frames) #718 _InheritedProviderScopeElement.mount (package:provider/src/inherited_provider.dart:411:11) ... Normal element mounting (7 frames) #725 SingleChildWidgetElementMixin.mount (package:nested/nested.dart:222:11) ... Normal element mounting (7 frames) #732 _NestedHookElement.mount (package:nested/nested.dart:187:11) ... Normal element mounting (7 frames) #739 _InheritedProviderScopeElement.mount (package:provider/src/inherited_provider.dart:411:11) ... Normal element mounting (7 frames) #746 SingleChildWidgetElementMixin.mount (package:nested/nested.dart:222:11) ... Normal element mounting (7 frames) #753 _NestedHookElement.mount (package:nested/nested.dart:187:11) ... Normal element mounting (7 frames) #760 _InheritedProviderScopeElement.mount (package:provider/src/inherited_provider.dart:411:11) ... Normal element mounting (7 frames) #767 SingleChildWidgetElementMixin.mount (package:nested/nested.dart:222:11) ... Normal element mounting (7 frames) #774 _NestedHookElement.mount (package:nested/nested.dart:187:11) ... Normal element mounting (7 frames) #781 _InheritedProviderScopeElement.mount (package:provider/src/inherited_provider.dart:411:11) ... Normal element mounting (7 frames) #788 SingleChildWidgetElementMixin.mount (package:nested/nested.dart:222:11) ... Normal element mounting (7 frames) #795 _NestedHookElement.mount (package:nested/nested.dart:187:11) ... Normal element mounting (7 frames) #802 SingleChildWidgetElementMixin.mount (package:nested/nested.dart:222:11) ... Normal element mounting (27 frames) #829 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3971:16) #830 Element.updateChild (package:flutter/src/widgets/framework.dart:3708:18) #831 RenderObjectToWidgetElement._rebuild (package:flutter/src/widgets/binding.dart:1240:16) #832 RenderObjectToWidgetElement.mount (package:flutter/src/widgets/binding.dart:1209:5) #833 RenderObjectToWidgetAdapter.attachToRenderTree.<anonymous closure> (package:flutter/src/widgets/binding.dart:1156:18) #834 BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2720:19) #835 RenderObjectToWidgetAdapter.attachToRenderTree (package:flutter/src/widgets/binding.dart:1155:13) #836 WidgetsBinding.attachRootWidget (package:flutter/src/widgets/binding.dart:988:7) #837 WidgetsBinding.scheduleAttachRootWidget.<anonymous closure> (package:flutter/src/widgets/binding.dart:968:7) #841 _RawReceivePort._handleMessage (dart:isolate-patch/isolate_patch.dart:189:12) (elided 3 frames from class _Timer and dart:async-patch) ==================================================================================================== ======== Exception caught by Flutter framework ===================================================== The following StateError was thrown during a service extension callback for "ext.flutter.platformOverride": Bad state: Tried to read a provider that threw during the creation of its value. The exception occurred during the creation of type HomeViewModel. ══╡ EXCEPTION CAUGHT BY PROVIDER ╞═══════════════════════════════ The following ProviderNotFoundException was thrown: Error: Could not find the correct Provider<PhotoApiRepositoryImpl> above this _InheritedProviderScope<GetPhotosUseCase?> Widget This happens because you used a `BuildContext` that does not include the provider of your choice. There are a few common scenarios: - You added a new provider in your `main.dart` and performed a hot-reload. To fix, perform a hot-restart. - The provider you are trying to read is in a different route. Providers are "scoped". So if you insert of provider inside a route, then other routes will not be able to access that provider. - You used a `BuildContext` that is an ancestor of the provider you are trying to read. Make sure that _InheritedProviderScope<GetPhotosUseCase?> is under your MultiProvider/Provider<PhotoApiRepositoryImpl>. This usually happens when you are creating a provider and trying to read it immediately. For example, instead of: ``` Widget build(BuildContext context) { return Provider<Example>( create: (_) => Example(), // Will throw a ProviderNotFoundError, because `context` is associated // to the widget that is the parent of `Provider<Example>` child: Text(context.watch<Example>().toString()), ); } ``` consider using `builder` like so: ``` Widget build(BuildContext context) { return Provider<Example>( create: (_) => Example(), // we use `builder` to obtain a new `BuildContext` that has access to the provider builder: (context, child) { // No longer throws return Text(context.watch<Example>().toString()); } ); } ``` If none of these solutions work, consider asking for help on StackOverflow: https://stackoverflow.com/questions/tagged/flutter When the exception was thrown, this was the stack: #0 Provider._inheritedElementOf (package:provider/src/provider.dart:343:7) #1 Provider.of (package:provider/src/provider.dart:293:30) #2 new ProxyProvider.<anonymous closure> (package:provider/src/proxy_provider.dart:162:22) #3 _CreateInheritedProviderState.value (package:provider/src/inherited_provider.dart:767:36) #4 _InheritedProviderScopeElement.value (package:provider/src/inherited_provider.dart:590:33) #5 Provider.of (package:provider/src/provider.dart:303:37) #6 ReadContext.read (package:provider/src/provider.dart:649:21) #7 viewModels.<anonymous closure> (package:image_search/data/di/provider_setup.dart:40:50) #8 _CreateInheritedProviderState.value (package:provider/src/inherited_provider.dart:736:36) #9 _InheritedProviderScopeElement.value (package:provider/src/inherited_provider.dart:590:33) #10 Provider.of (package:provider/src/provider.dart:303:37) #11 WatchContext.watch (package:provider/src/provider.dart:693:21) #12 _HomeScreenState.build (package:image_search/presentation/home/home_screen.dart:44:31) #13 StatefulElement.build (package:flutter/src/widgets/framework.dart:5198:27) #14 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5086:15) #15 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5251:11) #16 Element.rebuild (package:flutter/src/widgets/framework.dart:4805:7) #17 ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:5068:5) #18 StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:5242:11) #19 ComponentElement.mount (package:flutter/src/widgets/framework.dart:5062:5) ... Normal element mounting (24 frames) #43 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3971:16) #44 MultiChildRenderObjectElement.inflateWidget (package:flutter/src/widgets/framework.dart:6570:36) #45 MultiChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:6582:32) ... Normal element mounting (178 frames) #223 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3971:16) #224 MultiChildRenderObjectElement.inflateWidget (package:flutter/src/widgets/framework.dart:6570:36) #225 MultiChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:6582:32) ... Normal element mounting (472 frames) #697 _InheritedProviderScopeElement.mount (package:provider/src/inherited_provider.dart:411:11) ... Normal element mounting (7 frames) #704 SingleChildWidgetElementMixin.mount (package:nested/nested.dart:222:11) ... Normal element mounting (7 frames) #711 _NestedHookElement.mount (package:nested/nested.dart:187:11) ... Normal element mounting (7 frames) #718 _InheritedProviderScopeElement.mount (package:provider/src/inherited_provider.dart:411:11) ... Normal element mounting (7 frames) #725 SingleChildWidgetElementMixin.mount (package:nested/nested.dart:222:11) ... Normal element mounting (7 frames) #732 _NestedHookElement.mount (package:nested/nested.dart:187:11) ... Normal element mounting (7 frames) #739 _InheritedProviderScopeElement.mount (package:provider/src/inherited_provider.dart:411:11) ... Normal element mounting (7 frames) #746 SingleChildWidgetElementMixin.mount (package:nested/nested.dart:222:11) ... Normal element mounting (7 frames) #753 _NestedHookElement.mount (package:nested/nested.dart:187:11) ... Normal element mounting (7 frames) #760 _InheritedProviderScopeElement.mount (package:provider/src/inherited_provider.dart:411:11) ... Normal element mounting (7 frames) #767 SingleChildWidgetElementMixin.mount (package:nested/nested.dart:222:11) ... Normal element mounting (7 frames) #774 _NestedHookElement.mount (package:nested/nested.dart:187:11) ... Normal element mounting (7 frames) #781 _InheritedProviderScopeElement.mount (package:provider/src/inherited_provider.dart:411:11) ... Normal element mounting (7 frames) #788 SingleChildWidgetElementMixin.mount (package:nested/nested.dart:222:11) ... Normal element mounting (7 frames) #795 _NestedHookElement.mount (package:nested/nested.dart:187:11) ... Normal element mounting (7 frames) #802 SingleChildWidgetElementMixin.mount (package:nested/nested.dart:222:11) ... Normal element mounting (27 frames) #829 Element.inflateWidget (package:flutter/src/widgets/framework.dart:3971:16) #830 Element.updateChild (package:flutter/src/widgets/framework.dart:3708:18) #831 RenderObjectToWidgetElement._rebuild (package:flutter/src/widgets/binding.dart:1240:16) #832 RenderObjectToWidgetElement.mount (package:flutter/src/widgets/binding.dart:1209:5) #833 RenderObjectToWidgetAdapter.attachToRenderTree.<anonymous closure> (package:flutter/src/widgets/binding.dart:1156:18) #834 BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2720:19) #835 RenderObjectToWidgetAdapter.attachToRenderTree (package:flutter/src/widgets/binding.dart:1155:13) #836 WidgetsBinding.attachRootWidget (package:flutter/src/widgets/binding.dart:988:7) #837 WidgetsBinding.scheduleAttachRootWidget.<anonymous closure> (package:flutter/src/widgets/binding.dart:968:7) #841 _RawReceivePort._handleMessage (dart:isolate-patch/isolate_patch.dart:189:12) (elided 3 frames from class _Timer and dart:async-patch) ═════════════════════════════════════════════════════════════════ When the exception was thrown, this was the stack: #0 _CreateInheritedProviderState.value (package:provider/src/inherited_provider.dart:709:7) #1 _InheritedProviderScopeElement.reassemble (package:provider/src/inherited_provider.dart:422:60) #2 Element.reassemble.<anonymous closure> (package:flutter/src/widgets/framework.dart:3434:13) #3 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5138:14) #4 Element.reassemble (package:flutter/src/widgets/framework.dart:3432:5) #5 Element.reassemble.<anonymous closure> (package:flutter/src/widgets/framework.dart:3434:13) #6 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5138:14) #7 Element.reassemble (package:flutter/src/widgets/framework.dart:3432:5) #8 Element.reassemble.<anonymous closure> (package:flutter/src/widgets/framework.dart:3434:13) #9 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5138:14) #10 Element.reassemble (package:flutter/src/widgets/framework.dart:3432:5) #11 _InheritedProviderScopeElement.reassemble (package:provider/src/inherited_provider.dart:420:11) #12 Element.reassemble.<anonymous closure> (package:flutter/src/widgets/framework.dart:3434:13) #13 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5138:14) #14 Element.reassemble (package:flutter/src/widgets/framework.dart:3432:5) #15 Element.reassemble.<anonymous closure> (package:flutter/src/widgets/framework.dart:3434:13) #16 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5138:14) #17 Element.reassemble (package:flutter/src/widgets/framework.dart:3432:5) #18 Element.reassemble.<anonymous closure> (package:flutter/src/widgets/framework.dart:3434:13) #19 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5138:14) #20 Element.reassemble (package:flutter/src/widgets/framework.dart:3432:5) #21 _InheritedProviderScopeElement.reassemble (package:provider/src/inherited_provider.dart:420:11) #22 Element.reassemble.<anonymous closure> (package:flutter/src/widgets/framework.dart:3434:13) #23 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5138:14) #24 Element.reassemble (package:flutter/src/widgets/framework.dart:3432:5) #25 Element.reassemble.<anonymous closure> (package:flutter/src/widgets/framework.dart:3434:13) #26 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5138:14) #27 Element.reassemble (package:flutter/src/widgets/framework.dart:3432:5) #28 Element.reassemble.<anonymous closure> (package:flutter/src/widgets/framework.dart:3434:13) #29 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5138:14) #30 Element.reassemble (package:flutter/src/widgets/framework.dart:3432:5) #31 _InheritedProviderScopeElement.reassemble (package:provider/src/inherited_provider.dart:420:11) #32 Element.reassemble.<anonymous closure> (package:flutter/src/widgets/framework.dart:3434:13) #33 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5138:14) #34 Element.reassemble (package:flutter/src/widgets/framework.dart:3432:5) #35 Element.reassemble.<anonymous closure> (package:flutter/src/widgets/framework.dart:3434:13) #36 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5138:14) #37 Element.reassemble (package:flutter/src/widgets/framework.dart:3432:5) #38 Element.reassemble.<anonymous closure> (package:flutter/src/widgets/framework.dart:3434:13) #39 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5138:14) #40 Element.reassemble (package:flutter/src/widgets/framework.dart:3432:5) #41 _InheritedProviderScopeElement.reassemble (package:provider/src/inherited_provider.dart:420:11) #42 Element.reassemble.<anonymous closure> (package:flutter/src/widgets/framework.dart:3434:13) #43 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5138:14) #44 Element.reassemble (package:flutter/src/widgets/framework.dart:3432:5) #45 Element.reassemble.<anonymous closure> (package:flutter/src/widgets/framework.dart:3434:13) #46 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5138:14) #47 Element.reassemble (package:flutter/src/widgets/framework.dart:3432:5) #48 Element.reassemble.<anonymous closure> (package:flutter/src/widgets/framework.dart:3434:13) #49 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5138:14) #50 Element.reassemble (package:flutter/src/widgets/framework.dart:3432:5) #51 Element.reassemble.<anonymous closure> (package:flutter/src/widgets/framework.dart:3434:13) #52 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5138:14) #53 Element.reassemble (package:flutter/src/widgets/framework.dart:3432:5) #54 Element.reassemble.<anonymous closure> (package:flutter/src/widgets/framework.dart:3434:13) #55 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5138:14) #56 Element.reassemble (package:flutter/src/widgets/framework.dart:3432:5) #57 StatefulElement.reassemble (package:flutter/src/widgets/framework.dart:5213:11) #58 Element.reassemble.<anonymous closure> (package:flutter/src/widgets/framework.dart:3434:13) #59 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5138:14) #60 Element.reassemble (package:flutter/src/widgets/framework.dart:3432:5) #61 Element.reassemble.<anonymous closure> (package:flutter/src/widgets/framework.dart:3434:13) #62 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5138:14) #63 Element.reassemble (package:flutter/src/widgets/framework.dart:3432:5) #64 Element.reassemble.<anonymous closure> (package:flutter/src/widgets/framework.dart:3434:13) #65 RenderObjectToWidgetElement.visitChildren (package:flutter/src/widgets/binding.dart:1194:14) #66 Element.reassemble (package:flutter/src/widgets/framework.dart:3432:5) #67 BuildOwner.reassemble (package:flutter/src/widgets/framework.dart:3162:12) #68 WidgetsBinding.performReassemble (package:flutter/src/widgets/binding.dart:1008:19) #69 BindingBase.lockEvents (package:flutter/src/foundation/binding.dart:652:41) #70 BindingBase.reassembleApplication (package:flutter/src/foundation/binding.dart:691:12) #71 BindingBase.initServiceExtensions.<anonymous closure>.<anonymous closure> (package:flutter/src/foundation/binding.dart:587:19) #72 BindingBase.registerServiceExtension.<anonymous closure> (package:flutter/src/foundation/binding.dart:936:32) <asynchronous suspension> ==================================================================================================== ======== Exception caught by scheduler library ===================================================== The following _TypeError was thrown during a scheduler callback: type 'Null' is not a subtype of type 'GetPhotosUseCase' in type cast When the exception was thrown, this was the stack: #0 _CreateInheritedProviderState.value (package:provider/src/inherited_provider.dart:789:19) #1 _CreateInheritedProviderState.debugFillProperties (package:provider/src/inherited_provider.dart:806:44) #2 _InheritedProviderScopeElement.debugFillProperties (package:provider/src/inherited_provider.dart:631:20) #3 _InheritedProviderElement.debugFillProperties.<anonymous closure> (package:provider/src/inherited_provider.dart:180:28) #4 ComponentElement.visitChildren (package:flutter/src/widgets/framework.dart:5138:14) #5 _InheritedProviderElement.debugFillProperties (package:provider/src/inherited_provider.dart:180:5) #6 DiagnosticableNode.builder.<anonymous closure> (package:flutter/src/foundation/diagnostics.dart:2891:17) #7 DiagnosticableNode.builder (package:flutter/src/foundation/diagnostics.dart:2894:8) #8 DiagnosticableNode.getProperties (package:flutter/src/foundation/diagnostics.dart:2908:105) #9 DiagnosticsProperty.toJsonMap (package:flutter/src/foundation/diagnostics.dart:2613:57) #10 DiagnosticsNode.toJsonList.<anonymous closure> (package:flutter/src/foundation/diagnostics.dart:1675:19) #11 MappedListIterable.elementAt (dart:_internal/iterable.dart:415:31) #12 ListIterator.moveNext (dart:_internal/iterable.dart:344:26) #13 new _GrowableList._ofEfficientLengthIterable (dart:core-patch/growable_array.dart:189:27) #14 new _GrowableList.of (dart:core-patch/growable_array.dart:150:28) #15 new List.of (dart:core-patch/array_patch.dart:47:28) #16 ListIterable.toList (dart:_internal/iterable.dart:214:7) #17 DiagnosticsNode.toJsonList (package:flutter/src/foundation/diagnostics.dart:1676:8) #18 DiagnosticsNode.toJsonMap.<anonymous closure> (package:flutter/src/foundation/diagnostics.dart:1637:25) #19 DiagnosticsNode.toJsonMap (package:flutter/src/foundation/diagnostics.dart:1650:6) #20 WidgetInspectorService._nodeToJson (package:flutter/src/widgets/widget_inspector.dart:1652:18) #21 WidgetInspectorService._reportStructuredError (package:flutter/src/widgets/widget_inspector.dart:929:44) #22 FlutterError.reportError (package:flutter/src/foundation/assertions.dart:1185:14) #23 _reportException (package:flutter/src/widgets/framework.dart:6628:16) #24 BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2782:11) #25 WidgetsBinding.drawFrame (package:flutter/src/widgets/binding.dart:903:21) #26 RendererBinding._handlePersistentFrameCallback (package:flutter/src/rendering/binding.dart:358:5) #27 SchedulerBinding._invokeFrameCallback (package:flutter/src/scheduler/binding.dart:1284:15) #28 SchedulerBinding.handleDrawFrame (package:flutter/src/scheduler/binding.dart:1214:9) #29 SchedulerBinding._handleDrawFrame (package:flutter/src/scheduler/binding.dart:1072:5) #30 _invoke (dart:ui/hooks.dart:142:13) #31 PlatformDispatcher._drawFrame (dart:ui/platform_dispatcher.dart:359:5) #32 _drawFrame (dart:ui/hooks.dart:112:31) ====================================================================================================
- 미해결Flutter 중급 1편 - 클린 아키텍처
SingleChildWidget이 import가 안되는데 어떻게 해야할까요?
위와 같이 import를 할수가 없습니다,,,어떻게 해결해야 좋을까요?ㅠㅠ
- 미해결Flutter 중급 1편 - 클린 아키텍처
StreamSubscription 해제시키기
강의 마지막 부분에 StreamSubscription 해제 관련해서 질문드립니다. dispose에서 _subscription?.cancel(); 해주는데 다시 화면에 들어가면 오류가 발생하여 StreamController 의 속성을 boradcast 로 주어 오류를 해결하셧는데 stream 을 해제해야 StreamSubscription 이 해제되어야 할 것 같은데 broadcast 에서는 이전에 구독한게 계속 남아있지 않을까요??
- 미해결Flutter 중급 1편 - 클린 아키텍처
flutter doctor java version 이슈가 있습니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. flutter doctor -v 를 하면 저런 이슈가 하나 있는데 해결이 어렵습니다. 어떻게 해야 해결할 수 있을까요? 사용하는 컴퓨터는 macbook m1입니다.
- 미해결Flutter 중급 1편 - 클린 아키텍처
Freezed 질문드립니다.
JsonSerializable은 상속이 가능해서class User { final id; final nickname; ... } class UserDetail extends User { final age; UserDetail({super.id,... this.age}) }이런식으로 처리가 가능한데, Freezed는 상속이 불가능하더라구요. 실무에서 위처럼 상속으로 모델을 사용하는경우가 별로없을까요?