묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
SkeletonParagraph()에 관한 질문입니다.
안녕하세요."Skeleton 사용하기"의 강의 내용을 구현하고 있습니다.pubspec.yamldependencies: flutter: sdk: flutter # The following adds the Cupertino Icons font to your application. # Use with the CupertinoIcons class for iOS style icons. cupertino_icons: ^1.0.6 dio: ^5.5.0+1 flutter_secure_storage: ^9.2.2 json_annotation: ^4.9.0 retrofit: '>=4.0.0 <5.0.0' logger: any #for logging purpose flutter_riverpod: ^2.5.1 riverpod_annotation: ^2.3.5 skeletons: ^0.0.3restaurant_detail_screen.dart에서import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:skeletons/skeletons.dart'; return DefaultLayout( title: '불타는 떡볶이', child: CustomScrollView( slivers: [ renderTop( model: state, ), renderLoading(), // if (state is RestaurantDetailModel) renderLabel(), // if (state is RestaurantDetailModel) // renderProducts( // products: state.products, // ), ], ), ); }// SkeletonParagraph Logic SliverPadding renderLoading() { return SliverPadding( padding: EdgeInsets.symmetric( horizontal: 16.0, ), sliver: SliverList( delegate: SliverChildListDelegate( List.generate( 3, (index) => SkeletonParagraph( style: SkeletonParagraphStyle( lines: 5, ), ), ), ), ), ); }을 구현하고 재실행하면 다음과 같은 에러가 발생하고 있습니다.Skeleton용하기이미지가 작아서 텍스트로 붙여넣었습니다.Launching lib\main.dart on sdk gphone64 x86 64 in debug mode...Running Gradle task 'assembleDebug'...../../../../AppData/Local/Pub/Cache/hosted/pub.dev/skeletons-0.0.3/lib/src/widgets.dart:56:42: Error: The getter 'backgroundColor' isn't defined for the class 'ThemeData'. - 'ThemeData' is from 'package:flutter/src/material/theme_data.dart' ('/C:/flutter/packages/flutter/lib/src/material/theme_data.dart').Try correcting the name to the name of an existing getter, or defining a getter or field named 'backgroundColor'. color: Theme.of(context).backgroundColor, ^^^^^^^^^^^^^^^../../../../AppData/Local/Pub/Cache/hosted/pub.dev/skeletons-0.0.3/lib/src/widgets.dart💯46: Error: The getter 'backgroundColor' isn't defined for the class 'ThemeData'. - 'ThemeData' is from 'package:flutter/src/material/theme_data.dart' ('/C:/flutter/packages/flutter/lib/src/material/theme_data.dart').Try correcting the name to the name of an existing getter, or defining a getter or field named 'backgroundColor'. color: Theme.of(context).backgroundColor, ^^^^^^^^^^^^^^^Target kernel_snapshot failed: Exception여러가지로 찾아보았지만, 해결되지 않았습니다.이 문제에 대한 해결 방법에 대해 질문을 드립니다.감사합니다.
-
해결됨Flutter 앱 개발 실전
수강기간 연장 요청
안녕하세요 수강기간 연장 부탁드립니다
-
해결됨Flutter 앱 개발 실전
stateful 상태관리에서
stateful 상태관리 수업에서 store위젯을 stateless -> stateful로 바꿔 봤습니다생성자 body에도 print()로 간단히 출력해보고 initState와 dispose도 추가해봤구요 아래 코드입니다. import 'package:flutter/material.dart'; import 'package:flutter_app/common/product.dart'; import 'package:flutter_app/common/product_tile.dart'; class Store extends StatefulWidget { //statelessdptj -> stateful로 바꿈 Store({ super.key, required this.cartProductList, required this.onPressed, }){ print(key); //추가 print(cartProductList.length); //추가 } /// 카트에 담긴 상품 목록 final List<Product> cartProductList; /// 클릭 이벤트 final void Function(Product product) onPressed; @override State<Store> createState() { print(key); print(cartProductList.length); return _StoreState(); } } class _StoreState extends State<Store> { @override void initState(){ //추가 super.initState(); print("init"); } @override void dispose(){ //추가 print("dispose"); super.dispose(); } @override Widget build(BuildContext context) { print("store build"); //추가 return Scaffold( body: ListView.builder( itemCount: storeProductList.length, itemBuilder: (context, index) { Product product = storeProductList[index]; return ProductTile( product: product, isInCart: widget.cartProductList.contains(product), onPressed: widget.onPressed, ); }, ), ); } }결과를 보니 버튼을 클릭할 때 마다 생성자 바디가 호출되고 있는데 , state는 build함수만 호출되고 있습니다. 제가 궁금한 것은 상태가 바뀌면 build 함수가 재실행 되는 것은 압니다근데 지금은 store위젯과 storeState는 한 세트 아닌가요 ?store위젯 생성자가 불린다는 것은, 새로 인스턴스 만들어 진다는 것인데 그럼 한 세트인 storeState도 매번 initState도 불려야 할 거 같은데.... 왜 그런지 알고 싶습니다.
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
로그아웃 시 캐시 삭제
logout 로직 실행 시 강의에서는 storage만 삭제하는데 provider들의 캐시는 지워야 하는게 맞는지궁금해서 질문 드립니다. 아니면 user와 연동된 장바구니와 주문 프로바이더 캐시만 null로 만들어야 할까요?? 추가로 만약 캐시를 지운다면userMeProvider에서 ref를 받아와 각 프로바이더 state를null로 바꿔버리면 되나요?
-
미해결[코드팩토리] [중급] 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 앱 개발 실전
List<Product> 작성시
안녕하세요, StaefullWidget 상태관리 구현수업을 따라가던 중에 15 번 라인에서 엔터 2번 입력List<Product> 를 입력하실때 자동 완성으로 Product 가 제안 되서 선택하시던데.. 저는 Prodcut 가 나오질 않는데 무엇이 빠져서 그럴까요?또 라인 완성후 자동으로 import 가 생성되던데. 저는 전구를 눌러서 선택을 해야만 import 가 되는데.. 익스텐션등 특정한 무슨 설정이 빠져서 그런것일까요?감사합니다.
-
미해결[2024 최신] [코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
알려주신 사이트에 접속이 불가능해요
해당 이미지와 같이 링크에 접속이 불가능합니다.
-
해결됨Flutter 앱 개발 기초
IInputConnectionWrapper 끄는 방법 문의
입력 창에서 키보드를 입력할 때마다 아래와 같이 warning log가 주르륵 뜹니다.W/IInputConnectionWrapper(12010): getSelectedText on inactive InputConnection W/IInputConnectionWrapper(12010): getTextAfterCursor on inactive InputConnection W/IInputConnectionWrapper(12010): getTextBeforeCursor on inactive InputConnection W/IInputConnectionWrapper(12010): getSelectedText on inactive InputConnection W/IInputConnectionWrapper(12010): getTextAfterCursor on inactive InputConnection W/IInputConnectionWrapper(12010): beginBatchEdit on inactive InputConnection W/IInputConnectionWrapper(12010): getTextBeforeCursor on inactive InputConnection W/IInputConnectionWrapper(12010): endBatchEdit on inactive InputConnection W/IInputConnectionWrapper(12010): beginBatchEdit on inactive InputConnection W/IInputConnectionWrapper(12010): getTextBeforeCursor on inactive InputConnection W/IInputConnectionWrapper(12010): endBatchEdit on inactive InputConnection번잡하기만 하고 별로 필요 없어서 해당 로그를 보고 싶지 않은데 로그 레벨 조정을 어떻게 하죠? 검색해도 제대로 된 정보는 안 나오네요
-
해결됨[2024 최신] [코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
도서 랑 강의 내용흐름이 동일한가요?
강의가 좋아서 출간하신 강의 학습 도서를 발견했는데, 이 책이랑 강의 내용 흐름이 동일한가요??? 구매를 하면 강의내용을 이해하고, 공부하는데 도움이 될까 궁금해서요
-
해결됨Flutter 앱 개발 기초
minSdkVersion (firebase_auth) 관련 에러 발생하는 분들 참고하세요
Flutter version 이 3.22 버전을 사용 중인데, minSdkVersion 에러가 나는 분들이 있을 것입니다. [에러 상황]firebase 프로젝트 준비 및 google-services.json 주입을 마치고, flutter 명령어로 first base에 필요한 패키지를 다운로드 받은 이후의 상황입니다. main.dart 를 실행하는데 아래와 같은 에러가 발생하는 분들은 주목하세요.Manifest merger failed : uses-sdk:minSdkVersion 21 cannot be smaller than version 23 declared in library [:firebase_auth] 위와 같은 에러가 발생하는 분들은 아마 앱 레벨의 build.gradle이 이와 같이 설정되어있을 겁니다.defaultConfig { applicationId = "com.example.bucket_list_with_firebase" minSdk = flutter.minSdkVersion targetSdk = flutter.targetSdkVersion versionCode = flutterVersionCode.toInteger() versionName = flutterVersionName }위 메시지를 해석하면 firebase_auth가 minSdkVersion이 23 이상을 지원하는데, 현재 너의 프로젝트의 minSdkVersion은 21이 되어있어서 지원이 불가능하다는 메시지입니다. [에러 원인]이는 flutter sdk에서 android의 minSdkVersion이 21로 설정되어있기 때문에 그렇습니다. 실제로 강의자료에 나와있듯이 flutter sdk의 flutter.groovy 파일을 살펴보면class FlutterExtension { public final int compileSdkVersion = 34 public final int minSdkVersion = 21 // 다른 변수들 }이처럼 21 버전을 상수값으로 사용하고 있는 것을 알 수 있습니다. 하지만 firebase의 auth 기능을 사용하려면 minSdkVersion이 23이어야 합니다. [해결 방법]이를 해결하기 위한 방법은 터미널 로그에 잘 표시되어있습니다.The plugin firebase_auth requires a higher Android SDK version. Fix this issue by adding the following to the file android { defaultConfig { minSdkVersion 23 } } Following this change, your app will not be available to users running Android SDKs below 23.위에 로그에서 recommend 하듯이 내 flutter project의 minSdkVersion을 바꿔주면 해결됩니다. flutter.minSdkVersion 대신 상수로 23 값을 입력하면 됩니다.defaultConfig { // applicationId minSdk = 23 // 다른 설정 값들 } [해결 완료 후 동작 확인]아래와 같이 main.dart를 실행하면 로그인 화면이 정상적으로 보여져야 합니다.
-
미해결처음하는 플러터(Flutter) 기초부터 실전까지 [풀스택 Part4] (쉽고 견고하게 단계별로 다양한 프로젝트까지)
안드로이드 스튜디오 테마 문의 드립니다.
안녕하세요!강의 재미있게 진행하고 있습니다. 강의 내용과는 별개의 질문입니다. ^-^; 다름이 아니라 강의 동영상처럼 테마를 바꾸려면 어떤 것을 사용해야 하나요?Material Theme UI 등 여러 가지를 받아서 적용해 봐도 딱 맘에 드는 것이 없습니다.강의 동영상의 테마가 바탕화면도 진하고 괄호도 알록달록하게 나와서 좋아 보입니다.
-
해결됨Flutter로 SNS 앱 만들기
섹션8 접속중인 사용자의 정보표시에서 에러발생했어요.
signOut()에서 에러 발생했어요.한번 봐주세요..로직을 멜로 보냅내다.
-
해결됨Flutter로 웹 서비스 개발하기 (1) - Responsive Web
폰트 자료 안보임.
폰트 자료 안보임.
-
해결됨[코드팩토리] [중급] 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
-
미해결[2024 최신] [코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
dependencies는 어떤식으로 찾아서 쓰나요?
개발자님 같은 경우 어떠한 기능을 넣고싶을 때 그 기능이 있는 dependency를 어디서, 어떻게 찾아서 주로 사용하시는지 궁금합니다.
-
미해결Flutter 응용 - 공공 API를 활용한 앱 만들기 (MVVM 패턴)
이제 버전 3.4인데 쭉 들어도되겠죠?...
까보니 api도 실시간이아니고 목데이터고...어떻게 생각하십니까? 선생님댓글도 23년에 멈췄네요
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
Go router 를 이용한 Nested Navigation 질문 입니다.
Appbar 에는 progress bar 를 넣고, app bar 를 그대로 남겨둔채로 여러 페이지를 이동할 수 있는 UI 를 구현하고자 하는데, 이런 Nested Navigation 은 일반적으로 ShellRoute 를 이용해서 구현하면 되는 것이 맞는지 혹은 다른 best practice 가 있는지 궁금합니다! 선생님께서는 이런 경우에 어떤 방식을 이용하시나요?좋은 강의 감사드립니다.
-
해결됨Flutter 앱 개발 실전
iterable추가자료
노션에서 iterable 더 둘러보라고 notion에서 링크 걸어주신 자료보면 가입은 했는데 다음 페이지를 읽으려면 멤버십 업그레이드를 하라고 해서요....