묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
paginationParams 파라미터 추가 등.
23년 5월에 비슷한 질문이 있었습니다.개인적으로 답하신듯해서 질문 드려봅니다.질문1.paginationParams의 count 값을각 메뉴에서 변경하려 하는데 현재 강의 소스에서는 어디부분을 확인해야 하는지요? 질문2.paginationParams에서 강의내용에 있는 after, count외에 다른..예를 들면 검색조건의 값을 받을 수 있게 하려면 어떻게 풀어야 하나요?강의내용에 있는 DB를 가지고 할 건 아니고,응용해서 별도로 해보다 보니.. 문의드립니다.
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
로그인 로딩 중 버튼 비활성화 관련 질문입니다.
riverpod 상태 관리 시watch 메서드를 통해 view를 변경하는데userMeProvider를 watch하지 않고로그인 버튼의 onPressed 내에서 read로 상태를 읽어도비활성화가 잘 작동합니다.제가 이해한 바로는 userMeProvider가 생성될 때 생성자의 getMe 메서드를 통해서 상태는 null이 되어있을텐데어떻게 로그인 버튼을 누른 후 상태가 UserModelLoading으로 바뀌었을 때 view가 이를 감지하고 버튼을 disable시키는지 이해가 되지 않아 질문드립니다. 현재 로그인 스크린은 ConsumerStateFul 위젯입니다.ConsumerWidget으로 변경해도 잘 작동합니다. ElevatedButton( onPressed: ref.read(userMeProvider) is UserModelLoading ? null : () => ref .read(userMeProvider.notifier) .login( username: username, password: password, ) .then( (value) { if (value is! UserModelError) return; ScaffoldMessenger.of(context).showSnackBar( SnackBar( content: Text(value.message), duration: Duration(seconds: 1), ), ); }, ), child: const Text('로그인'), ),
-
해결됨[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
"Restaurant Pagination 요청해보기" 09:45에서 일시적으로 snapshot.hasData:: false 가 나오는 현상에 대한 질문입니다.
안녕하세요."Restaurant Pagination 요청해보기" 09:45까지 선생님의 강의 따라서 잘 진행하고 있습니다.restaurant_screen.dart의 FutureBuilder<List> 내부에서 snapshot.hasData를 print하면 다음과 같은 결과를 얻었습니다.실행환경은 윈도우의 안드로이드 스튜디오를 사용하고 있습니다.log fileI/flutter (10452): -------- in RestaurantScreen --------I/flutter (10452): snapshot.error:: nullI/flutter (10452): snapshot.data:: nullI/flutter (10452): snapshot.hasData:: falseW/WindowOnBackDispatcher(10452): sendCancelIfRunning: isInProgress=false callback=io.flutter.embedding.android.FlutterActivity$1@a3bcdaaD/EGL_emulation(10452): app_time_stats: avg=24.92ms min=12.78ms max=289.52ms count=40I/flutter (10452): -------- in RestaurantScreen --------I/flutter (10452): snapshot.error:: nullI/flutter (10452): snapshot.data:: [{id: 5ac83bfb-f2b5-55f4-be3c-564be3f01a5b, name: 불타는 떡볶이, thumbUrl: /img/떡볶이/떡볶이.jpg, tags: [떡볶이, 치즈, 매운맛], priceRange: medium, ratings: 4.53, ratingsCount: 100, deliveryTime: 15, deliveryFee: 2000}, {id: 15480ad3-892f-50ce-ab39-540c34c6fb5a, name: 매콤 멕시칸, thumbUrl: /img/멕시칸/야채타코.jpg, tags: [멕시칸, 매콤, 할라피뇨], priceRange: expensive, ratings: 4.54, ratingsCount: 100, deliveryTime: 30, deliveryFee: 0}, {id: cf11d36a-7c61-5105-8306-5c8c7ff2c140, name: 엄마손 볶음밥, thumbUrl: /img/볶음밥/새우볶음밥.jpg, tags: [분식, 볶음밥, 김치], priceRange: cheap, ratings: 4.53, ratingsCount: 100, deliveryTime: 20, deliveryFee: 3000}, {id: 4729bd37-8927-5150-b036-395da7e7bb42, name: 신선 코팩 스시, thumbUrl: /img/스시/중간모듬스시.jpg, tags: [스시, 일식, 연어], priceRange: expensive, ratings: 4.54, ratingsCount: 100, deliveryTime: 30, deliveryFee: 0}, {id: 4fcf09a5-03ee-5a2e-9806-110285030c8I/flutter (10452): snapshot.hasData:: true잠시, if (!snapshot.hasData) { return Container(); }위 코드가 실행이 되고, 또 다시 RestaurantScreen Class가 호출되어 return ListView.separated() 로직이 실행되는 것 같습니다.SplashScreen Class의 initState() 함수에서 RootTab Class로 호출하고,RootTab Class에서 RestaurantScreen Class를 호출하는 로직으로 파악되데 원인을 잘 모르겠습니다.감사합니다.
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
styleForm에서 primary는 Deprecated 됐네요
https://docs.flutter.dev/release/breaking-changes/3-16-deprecations
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
Go router 를 이용한 Nested Navigation 질문 입니다.
Appbar 에는 progress bar 를 넣고, app bar 를 그대로 남겨둔채로 여러 페이지를 이동할 수 있는 UI 를 구현하고자 하는데, 이런 Nested Navigation 은 일반적으로 ShellRoute 를 이용해서 구현하면 되는 것이 맞는지 혹은 다른 best practice 가 있는지 궁금합니다! 선생님께서는 이런 경우에 어떤 방식을 이용하시나요?좋은 강의 감사드립니다.
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
섹션 10, restaurantDetail 캐싱하기 질문입니다.
안녕하세요. 제가 해당 섹션을 이해한바로는 getDetail 함수에서 메인스크린에서 식당을 클릭할때 들어오는 것 뿐만아니라, 식당 디테일 페이지 단독으로 실행할 때도 잘 작동하게끔 구현한걸로 아는데,데이터(CursorPagination)가 아얘 없을 때 this.paginate()를 한번 실행해서 처음 20개의 식당 데이터를 가져오고 이후 id 에 해당하는 getRestaurantDetail을 호출해서 해당 식당 정보를 가져온후 마지막에 map 으로 그 식당 id 에 해당하는 데이터를 교체하는 형식으로 진행한는데,애초에 this.paginate() 에서 가져온 20개의 식당 범위 밖에 식당이라면, getRestaurantDetail 로 식당정보를 가져오더라도 똑같은 식당 id를 찾을 수 없어서 교체할 수 없는 것 아닌지 질문드립니다.
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
빌드파일질문
강사님 안녕하세요\다름이 아니라 flutter_secure_storage를 추가하고 빌드파일에서 minSdkVersion 부분에 18을 추가하고 재시작을 하니 오류가 생겼습니다.그래서 minSdkVersion에 18을 지우고 재시작을 하니 정상동작하였습니다. 18을 작성하니 오류가 뜨는 이유가 무엇인가요?Launching lib\main.dart on SM S918N in debug mode...FAILURE: Build failed with an exception.* Where:Build file 'C:\Users\DongHan\AndroidStudioProjects\project\delivery_front\android\app\build.gradle' line: 41* What went wrong:A problem occurred evaluating project ':app'.> Could not find method minSdkVersion() for arguments [18] on extension 'flutter' of type FlutterExtension.* Try:> Run with --stacktrace option to get the stack trace.> Run with --info or --debug option to get more log output.> Run with --scan to get full insights.* Get more help at https://help.gradle.orgBUILD FAILED in 2sRunning Gradle task 'assembleDebug'... 3.7sError: Gradle task assembleDebug failed with exit code 1minSdkVersion을 18로 설정하고 재실행 했을떄의 오류 로그입니다plugins { id "com.android.application" id "kotlin-android" // The Flutter Gradle Plugin must be applied after the Android and Kotlin Gradle plugins. id "dev.flutter.flutter-gradle-plugin" } def localProperties = new Properties() def localPropertiesFile = rootProject.file("local.properties") if (localPropertiesFile.exists()) { localPropertiesFile.withReader("UTF-8") { reader -> localProperties.load(reader) } } def flutterVersionCode = localProperties.getProperty("flutter.versionCode") if (flutterVersionCode == null) { flutterVersionCode = "1" } def flutterVersionName = localProperties.getProperty("flutter.versionName") if (flutterVersionName == null) { flutterVersionName = "1.0" } android { namespace = "com.example.delivery" compileSdk = flutter.compileSdkVersion ndkVersion = flutter.ndkVersion compileOptions { sourceCompatibility = JavaVersion.VERSION_1_8 targetCompatibility = JavaVersion.VERSION_1_8 } defaultConfig { // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). applicationId = "com.example.delivery" // You can update the following values to match your application needs. // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration. minSdk = flutter.minSdkVersion targetSdk = flutter.targetSdkVersion versionCode = flutterVersionCode.toInteger() versionName = flutterVersionName } buildTypes { release { // TODO: Add your own signing config for the release build. // Signing with the debug keys for now, so `flutter run --release` works. signingConfig = signingConfigs.debug } } } flutter { source = "../.." } 위 파일은 android/app/build.gradle 파일입니다.
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
로그인에러
안녕하세요. 코펙님.이번에 중급강의로 넘어오면서 에러가 해결되지 않아 질문드립니다. 일단 저는 지금 노트북에서 갤럭시기기 연결해서 공부중입니다. E/flutter ( 6917): [ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: DioError [DioErrorType.other]: SocketException: Connection refused (OS Error: Connection refused, errno = 111), address = 192.168.1.10, port = 36410로그인 버튼을 클릭 시 위의 에러가 표시됩니다. ip주소도 콘솔에서 찾아서 변경하였지만, 안되었고...삽질을 1시간 정도 하였지만 도저히 이유를 모르겠어서 게시판에 글을 남깁니다.그리고 제가 dio의 버전이 처음에는 최신버전으로 했지만 혹시 강의버전과 일치하지 않아서 생기는 오류가 아닐까? 하고 프로젝트를 새로 생성해 dio버전을 맞추어서 실행하니 E/flutter ( 6917): [ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: DioError [DioErrorType.other]: SocketException: Connection refused (OS Error: Connection refused, errno = 111), address = 192.168.1.10, port = 48142E/flutter ( 6917): Source stack:E/flutter ( 6917): #0 DioMixin.fetch (package:dio/src/dio_mixin.dart:488:35)E/flutter ( 6917): #1 DioMixin.request (package:dio/src/dio_mixin.dart:483:12)E/flutter ( 6917): #2 DioMixin.post (package:dio/src/dio_mixin.dart:97:12)E/flutter ( 6917): #3 LoginScreen.build.<anonymous closure> (package:delivery2/user/view/login_screen.dart:65:44)E/flutter ( 6917): #4 InkResponseState.handleTap (package:flutter/src/material/inkwell.dart:1171:21)E/flutter ( 6917): #5 GestureRecognizer.invokeCallback (package:flutter/src/gestures/recognizer.dart:344:24)E/flutter ( 6917): #6 TapGestureRecognizer.handleTapUp (package:flutter/src/gestures/tap.dart:652:11)E/flutter ( 6917): #7 BaseTapGestureRecognizer._checkUp (package:flutter/src/gestures/tap.dart:309:5)E/flutter ( 6917): #8 BaseTapGestureRecognizer.handlePrimaryPointer (package:flutter/src/gestures/tap.dart:242:7)E/flutter ( 6917): #9 PrimaryPointerGestureRecognizer.handleEvent (package:flutter/src/gestures/recognizer.dart:696:9)E/flutter ( 6917): #10 PointerRouter._dispatch (package:flutter/src/gestures/pointer_router.dart:98:12)E/flutter ( 6917): #11 PointerRouter._dispatchEventToRoutes.<anonymous closure> (package:flutter/src/gestures/pointer_router.dart:143:9)E/flutter ( 6917): #12 LinkedHashMapMixin.forEach (dart:collection-patch/compacthash.dart:633:13)E/flutter ( 6917): #13 PointerRouter._dispatchEventToRoutes (package:flutter/src/gestures/pointer_router.dart:141:18)E/flutter ( 6917): #14 PointerRouter.route (package:flutter/src/gestures/pointer_router.dart:127:7)E/flutter ( 6917): #15 GestureBinding.handleEvent (package:flutter/src/gestures/binding.dart:495:19)E/flutter ( 6917): #16 GestureBinding.dispatchEvent (package:flutter/src/gestures/binding.dart:475:22)E/flutter ( 6917): #17 RendererBinding.dispatchEvent (package:flutter/src/rendering/binding.dart:425:11)E/flutter ( 6917): #18 GestureBinding._handlePointerEventImmediately (package:flutter/src/gestures/binding.dart:420:7)E/flutter ( 6917): #19 GestureBinding.handlePointerEvent (package:flutter/src/gestures/binding.dart:383:5)E/flutter ( 6917): #20 GestureBinding._flushPointerEventQueue (package:flutter/src/gestures/binding.dart:330:7)E/flutter ( 6917): #21 GestureBinding._handlePointerDataPacket (package:flutter/src/gestures/binding.dart:299:9)E/flutter ( 6917): #22 _invoke1 (dart:ui/hooks.dart:328:13)E/flutter ( 6917): #23 PlatformDispatcher._dispatchPointerDataPacket (dart:ui/platform_dispatcher.dart:442:7)E/flutter ( 6917): #24 _dispatchPointerDataPacket (dart:ui/hooks.dart:262:31)E/flutter ( 6917):E/flutter ( 6917): #0 DioMixin.fetch.<anonymous closure> (package:dio/src/dio_mixin.dart:643:7)E/flutter ( 6917): #1 _RootZone.runBinary (dart:async/zone.dart:1666:54)E/flutter ( 6917): #2 FutureListener.handleError (dart:async/futureimpl.dart:178:22)E/flutter ( 6917): #3 Future._propagateToListeners.handleError (dart:async/future_impl.dart:859:47)E/flutter ( 6917): #4 Future._propagateToListeners (dart:async/future_impl.dart:880:13)E/flutter ( 6917): #5 Future._completeError (dart:async/future_impl.dart:660:5)E/flutter ( 6917): #6 SyncCompleter.completeError (dart:async/future_impl.dart:63:12)E/flutter ( 6917): #7 Completer.completeError (dart:async/futureimpl.dart:27:5)E/flutter ( 6917): #8 Future.any.onError (dart:async/future.dart:623:45)E/flutter ( 6917): #9 _RootZone.runBinary (dart:async/zone.dart:1666:54)E/flutter ( 6917): #10 FutureListener.handleError (dart:async/futureimpl.dart:178:22)E/flutter ( 6917): #11 Future._propagateToListeners.handleError (dart:async/future_impl.dart:859:47)E/flutter ( 6917): #12 Future._propagateToListeners (dart:async/future_impl.dart:880:13)E/flutter ( 6917): #13 Future._completeError (dart:async/future_impl.dart:660:5)E/flutter ( 6917): #14 Future._asyncCompleteError.<anonymous closure> (dart:async/future_impl.dart:746:7)E/flutter ( 6917): #15 microtaskLoop (dart:async/schedulemicrotask.dart:40:21)E/flutter ( 6917): #16 startMicrotaskLoop (dart:async/schedulemicrotask.dart:49:5)E/flutter ( 6917):위의 오류가 발생하였습니다. 일단. 갤럭시 기기를 실제로 연동해서 강의를 진행하고 싶은 마음이 있어서 게시판에 글을 남깁니다.감사합니다
-
해결됨[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
스켈레톤 사용 불가
현재 제가 사용하고 있는 플러터 버전(3.22 stable)에서Theme.of(context).backgroundColor가 deprecated 된 것 같은데 스켈레톤 라이브러리 가장 최신버젼에서 해당 코드를 사용하고 있어 라이브러리를 땡겼을 시 에러가 나는 것같습니다.제가 잘못 알고 있는 부분이 있다면 알려주시면감사하겠습니다!
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
Provider 자동완성
FutureProvider만 쳐도 아래와 같이 자동 완성이 되어야 하는데,final FamilyModifierProvider = FutureProvider((ref) => 0);와 같이 자동 완성이 되어야 하는데,final FamilyModifierProvider = FutureProvider(_createFn)이렇게만 자동 완성 됩니다....ref.listen(provider, (previous, next) {});ref.read(listenProvider.notifier).update((state) => null);이것도 자동 완성이 안돼서 직접 코드 치면서 따라하고 있는데 너무 불편해서요.Vscode 윈도우 사용 중이고, 확장에서 Flutter 삭제하고 재설치해도 안되네요... pubspec.yaml에도 패키지 잘 넣어준 것 같은데... 다른 분 컴퓨터에서는 자동 완성 잘 됩니다. 혹시 원인 및 해결 방법 아시는 분이 계시다면 답변 부탁드리겠습니다!
-
해결됨[입문] Qt QML과 C++로 시작하는 크로스플랫폼 앱 개발
VisualStudio 2022 로 사용해도 큰 문제는 없나요?
VisualStudio 2022 로 사용해도 큰 문제는 없나요?2019 버전 다운로드가 막혔네요.Dev essential 가입해도 커뮤니티 버전은 막혔고 Visual C++ Redistributable for Visual Studio 2019 은 다운이 되는것 같은데, 2022 버전 사용해도 문제 없으면 2022버전 사용하려고 합니다. 어떤가요?
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
throttle해도 API가 2번 불릴때..
throttle을 적용해서 fetchmore동작이 제 기대치는 화면 하단부분 가면 한번 불리고 다시 리스트 랜더링되고 다시 화면 하단부분 가야 fetchmore API가 불려야하는데 화면 하단 부분 가면 fetchmore가 2번 불리네요물론 같은 api요청은 아니고 lastId가 다르게 2번 불리는데 fetchmor불리면 controller의 maxScrollExtent이 바뀌어서 한번만 불려야하는데 왜 2번불릴까요;
-
해결됨[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
go_router 로그인 성공후 홈화면 이동
로그인 성공해서 userModelLoading에서 userModel로 잘 바뀌었는데 홈화면으로 이동이 안되네요껏다가 다시키면 값은 잘 세팅 되어서 redirect쪽에서 홈화면은 잘가는걸 확인했는데 어디를 의심해야할지 몰라서 질문드립니당
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
메모리에 있지 않은 데이터 캐시처리 이후
메모리에 있지 않은 데이터의 캐시처리는 어떻게 하는지 가르쳐주셨는데 만약 음식탭에서 레스토랑에 없는 음식을 선택해서 state 를 추가하게 되면레스토랑 페이지에서 추가 데이터를 가져오게 되면 paginate(after: 새롭게 추가된 id) 가 되서 새롭게 추가된 id이후로 fetchCount를 가져올테니중간에 건너뛰는 일이 중간에 누락될 거 같은데 선생님은 어떻게 생각하세요??
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
paginate 일반화 하기 전에도요 ~
paginate를 일반환하는 과정에서 meta가 중요한 곳은 따로 처리를 안하고 data를 쓰는 부분에서 <T>를 추가해서 다음과 같이 final pState=State as CursorPagination<T>;라고 사용하셨는데 사실 일반화 전에도 Restaurant만paginate할떄도 final pState=State as CursorPagination<RestaurantModel>;을 안쓰셨는데 , 일반화 때문이 아니라도 dynamic 타입이 들어가니까 원래 써야 하는 곳이 아닌가 해서요 이때는 왜 안썼는지 궁금합니다. 강의 항상 잘보고 있습니다 감사합니다.
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
riverpod2.0으로 common의PaginationProvider만들기
@Riverpod( keepAlive: true, ) class PaginationNofifier<T extends IModelWithId, U extends IBasePaginationRepository<T>> extends _$PaginationNofifier { final U repository; PaginationNofifier({ required this.repository, }); @override CursorPaginationBase build() { final state = CursorPaginationLoading(); paginate(); return state; }codegenertator를 이용해서 PaginationProvider만들고 있는데 초기값은 build에서 설정은 했는데 repository를 생성자로 해서 받을려고 하는데 아래처럼 생성자 정의를 해도 에러가 나네요. The class PaginationNofifier must have a default constructor.다른 곳에서 비슷한 사례를 찾아봐도 기본 인스턴스 프로퍼티 자체를 받는 에제가 없어서 질문드립니다
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
Body로 인한 서버 리소스 관련
항상 강의 잘 보고있습니다!NestJS 강의를 보고 다시 중급 강의를 보다보니, 서버 관련된 부분을 더 이해하기 쉬웠습니다만, 이 섹션에서 PatchBasket을 요청할 때 body값에 object가 아닌 List로 요청을 보내기 때문에 추가하고싶은 상품정보 뿐만 아니라, 기존에 장바구니에 담겨있던 모든 상품들까지 같이 Patch요청이 되게 설계를 해 놓으셨더라구요. 현업에서도 보통 이런 방식을 사용하는건가요? 아니면 큰 의도 없이 설계하신건가요?다른종류의 상품이 수십개가 존재할 경우, 리소스 낭비가 되지 않을까 해서 여쭤봅니다!
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
상태 설계 관련 질문드립니다.
안녕하세요 코드팩토리님좋은 강의 제공해주셔서 너무 많이 배워갑니다.앱 설계 중에 궁금한 점이 생겨서 코드팩토리님의 의견을 들어보고자 질문 남깁니다. 하나의 화면에서 여러 개의 프로바이더를 참조하고 있는 경우 모든 프로바이더의 상태가 제대로 fetch 되어야만 화면을 보여주고, 하나라도 상태가 없다면 에러 화면을 보여주는 기능을 만들고 싶습니다.이 경우에 화면 단위로 화면과 관련된 상태 (isLoading, isError)를 관리해주는 provider를 만들어주기도 하나요? (ex. HomeScreenProvider)만약 이렇게 화면과 관련된 상태를 관리해주는 provider를 만들어준다고 하면 그 provider(HomeScreenProvider) 에서 다른 provider(feature1Provider, feature2Provider ...)를 의존하게 될텐데provider 끼리 서로 의존하게 되는게 좋은 설계인지도 궁금합니다. (provider 끼리는 같은 layer라고 생각이 들어서 입니다) 감사합니다.
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
Restaurant Pagination 요청해보기 - 이미지 404 문제
Image provider: NetworkImage("http://10.0.2.2:3000/img/파스타/까르보나라.jpg", scale: 1.0)Image key: NetworkImage("http://10.0.2.2:3000/img/파스타/까르보나라.jpg", scale: 1.0)안녕하세요.페이지네이션 요청 중 음식 사진이 자꾸 404 에러가 발생합니다.http://127.0.0.1:3000/img/떡볶이/떡볶이.jpg위 링크 또는 제 아이피를 넣어봤지만 모두 404에러가 발생하네요.사진 제외 음식 이름부터 별점까지는 모두 적용된 상태입니다.올려주신 서버 레포지토리상의 이미지들은 모두 정상인데혹시 이유를 알 수 있을까요?
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
TabController ScrollController 초기화 타이밍
TabController은 late 키워드를 써서 나중에 initState에서 초기화하는데 ScrollController은 디폴트값 넣어서 이미 만들더라고여 TabController은 왜 그렇게 하는지 알수있을까요지금 후반쪽 보고 있어서 강의중에 이미 말씀하셧다면 죄송합니다late TabController controller; @override void initState() { super.initState(); controller = TabController(length: 4, vsync: this); controller.addListener(tabListener); }final controller = ScrollController();