묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결[2024 최신] [코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
코드팩토리의 플러터 프로그래밍 2판 도서 질문
먼저 코드팩토리 플러터 프로그래밍 2판 출간 축하드립니다.1판이 워낙 좋아서 2판이 나오는 것이겠지요 ㅎㅎ 질문 드릴 사항은,제가 작년에 1판 도서와 본 강의도 구매해두었는데요,작년엔 스터디하지 못하고 올해 들어서 이제 시작 하려고 하는데,갑자기 도서 2판에 대한 정보를 알게되어서 문의를 드립니다. 2판 도서가 2월1일 출간으로 알고 있는데,2판 도서가 출간되면 강의의 커리큘럼이나 순서가 2판 기준으로 변경이 되나요?(출간예정도서 목차를 보니 1판하고 좀 다른부분이 있더라구요)아님 강의가 그대로라면, 1판 도서 또는 2판 도서와의 강의 싱크가 맞지 않을수도 있을것 같아서요 어떻게 준비하면 좋을지,그냥 1판도서로 쭉 스터디를 해도 괜찮을지,아님 2월에 2판이 나오면 2판을 구매하여 스터디를 하는게 싱크가 잘 맞을지,(dart나 안드로이드스튜디오 버전도 좀 다를텐데..)관련해서 조언해주시면 감사하겠습니다!
-
미해결[2024 최신] [코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
연결기계가 뜨지 않습니다.
Flutter를 클릭했을 때 화면은 뜨지만 기계명이 뜨지 않습니다.아래와 같은 오류메세지가 뜹니다
-
해결됨Flutter 앱 개발 실전
riverpod 코드 변환 질문
안녕하세요.기회가 되신다면 코드 전체를 riverpod 버전으로 변경해서 notion 에 올려주실 수 있으실까요?riverpod 버전으로 변경해보면서 Dart 문법에 대해 더 이해하게 되는 거 같습니다. 코드변환 질문1class LangService with ChangeNotifier { /// 현재 언어 Locale locale; LangService({ Locale? locale, }) : locale = locale ?? IntlHelper.en; /// 언어 변경 void toggleLang() { locale = IntlHelper.isKo ? IntlHelper.en : IntlHelper.ko; notifyListeners(); } }위 코드를 final langProvider = NotifierProvider<LangNotifier, Locale?> (LangNotifier.new); class LangNotifier extends Notifier<Locale?> { @override Locale? build() => IntlHelper.en; /// 언어 변경 void toggleLang() { state = IntlHelper.isKo ? IntlHelper.en : IntlHelper.ko; } }로 변경하면 맞나요? Notifier<Locale> 로 해야 하는지?Notifier<Locale?> 로 해야 하는지요? 코드변환 질문2class ThemeService with ChangeNotifier { ThemeService({ AppTheme? theme, }) : theme = theme ?? LightTheme(); /// 현재 테마 AppTheme theme; /// 테마 변경 void toggleTheme() { if (theme.brightness == Brightness.light) { theme = DarkTheme(); } else { theme = LightTheme(); } notifyListeners(); } /// Material ThemeData 커스텀 ThemeData get themeData { return ThemeData( /// Scaffold scaffoldBackgroundColor: theme.color.surface, /// AppBar appBarTheme: AppBarTheme( backgroundColor: theme.color.surface, elevation: 0, centerTitle: false, iconTheme: IconThemeData( color: theme.color.text, ), titleTextStyle: theme.typo.headline2.copyWith( color: theme.color.text, ), ), /// BottomSheet bottomSheetTheme: const BottomSheetThemeData( backgroundColor: Colors.transparent, constraints: BoxConstraints( maxWidth: Breakpoints.bottomSheet, ), ), ); } } extension ThemeServiceExt on BuildContext { ThemeService get themeService => watch<ThemeService>(); AppTheme get theme => themeService.theme; AppColor get color => theme.color; AppDeco get deco => theme.deco; AppTypo get typo => theme.typo; }위 코드를final themeProvider = NotifierProvider<ThemeNotifier, AppTheme>(ThemeNotifier.new); class ThemeNotifier extends Notifier<AppTheme> { @override AppTheme build() => LightTheme(); AppTheme get theme => state; AppColor get color => state.color; AppDeco get deco => state.deco; AppTypo get typo => state.typo; /// 테마 변경 void toggleTheme() { if (state.brightness == Brightness.light) { state = DarkTheme(); } else { state = LightTheme(); } } /// Material ThemeData 커스텀 ThemeData get themeData { return ThemeData( /// Scaffold scaffoldBackgroundColor: state.color.surface, /// AppBar appBarTheme: AppBarTheme( backgroundColor: state.color.surface, elevation: 0, centerTitle: false, iconTheme: IconThemeData( color: state.color.text, ), titleTextStyle: state.typo.headline2.copyWith( color: state.color.text, ), ), /// BottomSheet bottomSheetTheme: const BottomSheetThemeData( backgroundColor: Colors.transparent, constraints: BoxConstraints( maxWidth: Breakpoints.bottomSheet, ), ), ); } }로 변경하면 맞는지요?
-
해결됨[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
select provider 질문있습니다!
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.코드팩토리 디스코드https://bit.ly/3HzRzUMFlutter 강의를 구매하시면 코드팩토리 디스코드 서버 플러터 프리미엄 채널에 들어오실 수 있습니다! 디스코드 서버에 들어오시고 저에게 메세지로 강의를 구매하신 이메일을 보내주시면 프리미엄 채널에 등록해드려요! 프리미엄 채널에 들어오시면 모든 질의응답 최우선으로 답변해드립니다! 강의에 나오는 코드와 동일하다고 생각하는데 SelectProviderScreen을 띄웠을 때 버튼을 눌러서 toggle 메소드들이 실행되게 해도 값이 변경이 안됩니다! ㅠㅠselect_provider_screen.dartclass SelectProviderScreen extends ConsumerWidget { const SelectProviderScreen({super.key}); @override Widget build(BuildContext context, WidgetRef ref) { final state = ref.watch(selectProvider); return DefaultLayout( title: 'SelectProviderScreen', body: SizedBox( width: double.infinity, child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ Text(state.name), Text(state.isSpicy.toString()), Text(state.hasBought.toString()), ElevatedButton( onPressed: () { ref.read(selectProvider.notifier).toggleIsSpicy(); }, child: Text('Spicy Toggle'), ), ElevatedButton( onPressed: () { ref.read(selectProvider.notifier).toggleHasBought(); }, child: Text('hasBought Toggle'), ), ], ), ), ); } }select_provider.dartimport 'package:advanced_state/model/shopping_item_model.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; final selectProvider = StateNotifierProvider<SelectNotifier, ShoppingItemModel>( (ref) => SelectNotifier(), ); class SelectNotifier extends StateNotifier<ShoppingItemModel> { SelectNotifier() : super( ShoppingItemModel( name: '김치', quantity: 3, hasBought: false, isSpicy: true, ), ); toggleHasBought() { state.copyWith( hasBought: !state.hasBought, ); } toggleIsSpicy() { state.copyWith( isSpicy: !state.isSpicy, ); } }shopping_item_model.dartclass ShoppingItemModel { // 이름 final String name; // 갯수 final int quantity; // 구매했는지 final bool hasBought; // 매운지 final bool isSpicy; ShoppingItemModel({ required this.name, required this.quantity, required this.hasBought, required this.isSpicy, }); ShoppingItemModel copyWith({ //선택한 값만 선택적으로 변경할 수 있게 메소드를 만든다. String? name, int? quantity, bool? hasBought, bool? isSpicy, }) { return ShoppingItemModel( name: name ?? this.name, //name이 null일때는 this.name, null이 아닐때는 입력받은 name이 된다. quantity: quantity ?? this.quantity, hasBought: hasBought ?? this.hasBought, isSpicy: isSpicy ?? this.isSpicy, ); } }어느 부분이 잘못되었을까요...?
-
미해결Flutter 입문 - 안드로이드, iOS 개발을 한 번에 (with Firebase)
종속성 충돌 질문
firebase 관련 패키지 충돌에 관한 주요 공지에서 코드대로 맞춘 다음 flutter pub get을 했는데 firebase_core의 버전을 업그레이드나 firebase_auth의 버전을 다운그레이드하라는 메세지가 떴습니다... 알려준대로 다운그레이드하거나 업그레이드 진행해도 될까요?
-
미해결[2024 최신] [코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
WillPopScope 이제 안쓰이는거 같네여
PopScope로 쓰이는거 같네여 - 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.코드팩토리 디스코드https://bit.ly/3HzRzUMFlutter 강의를 구매하시면 코드팩토리 디스코드 서버 플러터 프리미엄 채널에 들어오실 수 있습니다! 디스코드 서버에 들어오시고 저에게 메세지로 강의를 구매하신 이메일을 보내주시면 프리미엄 채널에 등록해드려요! 프리미엄 채널에 들어오시면 모든 질의응답 최우선으로 답변해드립니다!
-
미해결[2024 최신] [코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
강의 repositories 링크는 어디에서 구할수 있나요?
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.코드팩토리 디스코드https://bit.ly/3HzRzUMFlutter 강의를 구매하시면 코드팩토리 디스코드 서버 플러터 프리미엄 채널에 들어오실 수 있습니다! 디스코드 서버에 들어오시고 저에게 메세지로 강의를 구매하신 이메일을 보내주시면 프리미엄 채널에 등록해드려요! 프리미엄 채널에 들어오시면 모든 질의응답 최우선으로 답변해드립니다!
-
미해결Flutter 중급 2편 - 실전 앱 개발 - 미국 주식 앱 (with 클린 아키텍처)
개남님 질문있씁니다! company_listing_entitiy가 왜 엔티티 인가요?
개남님 안녕하세요. 두 가지 여쭐 것이 있습니다!도메인 영역에 entitiy가 아니라 model 폴더를 위치하셨던데, freezed로 생성한 이상 각종 메소드가 들어가기에 "정석적인 속성만 존재하는 entitiy라고 보기엔 조금 그래서 model로 구분하셨구나~"하고 넘어갔습니다. 맞을까요?? 글구 company_listing_entitiy는 data 레이어에 속하는데 왜 entity인지 궁금합니다. 제가 아직 강의 초반이라 이해가 부족한 것인지.. 보통 data 레이어에서 api통신/로컬db와 관련된 비즈니스 로직에 사용할 model을 정의하고, 맵퍼가 도메인의 entity로 반환해 주는 구조로 이해했는데 이러면 CompanyListingEntity가 아니라, CompanyListingModel이 맞지 않나요? 제가 너무 시야를 좁게 보는 것 같기도하고.. 헷갈려 여쭙니다!
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
Restaurant Repository 구현하기부분 restaurant_repository.g에서 오류
레포지토리 추가하는부분 수강중인데 getRestaurantDetail부분을 제너레이트하면 생성된코드에서빨간줄이그이네요....restaurant_repository에서 오타난부분도 없는것같은데 해결책을 잘 모르겠습니다.... 잘 부탁드립니다 ㅠㅠ깃헙링크도 남겨보겠습니다...!https://github.com/hottunes/hukuoka_eatimport 'package:dio/dio.dart'; import 'package:hukuoka_eat/restaurant/model/restaurant_detail_model.dart'; import 'package:retrofit/http.dart'; part 'restaurant_repository.g.dart'; @RestApi() abstract class RestaurantRepository { // http://$ip/restaurant/ factory RestaurantRepository(Dio dio, {String baseUrl}) = _RestaurantRepository; // @GET('/') // paginate(); // http://$ip/restaurant/:id/ @GET('/{id}') Future<RestaurantDetailModel> getRestaurantDetail({ @Path() required String id, }); }
-
해결됨[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
플러터 시뮬레이터의 포트 오류..
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.코드팩토리 디스코드https://bit.ly/3HzRzUMFlutter 강의를 구매하시면 코드팩토리 디스코드 서버 플러터 프리미엄 채널에 들어오실 수 있습니다! 디스코드 서버에 들어오시고 저에게 메세지로 강의를 구매하신 이메일을 보내주시면 프리미엄 채널에 등록해드려요! 프리미엄 채널에 들어오시면 모든 질의응답 최우선으로 답변해드립니다! 플러터 시뮬레이터로 로그인을 시도하는데 아래와 같은 오류가 나요..[VERBOSE-2:dart_vm_initializer.cc(41)] Unhandled Exception: DioException [connection error]: The connection errored: Connection refused This indicates an error which most likely cannot be solved by the library. Error: SocketException: Connection refused (OS Error: Connection refused, errno = 61), address = 127.0.0.1, port = 534693000번 포트가 아니라 53469로 사용하고 있어서 나는 오류인 것은 알겠는데,어떻게 시뮬레이터를 3000번 포트에서 실행할 수 있을지 모르겠어요.
-
미해결Flutter로 SNS 앱 만들기
저는 키보드 동작이 안돼는데 원래 그런가요.
저는 키보드 동작이 안돼는데요 원래 그런가요.에뮬레이터로 테스트 하는데 이상은 없지만 불편해서요.
-
해결됨Flutter로 SNS 앱 만들기
Firebase StreamBuilder 사용은 왜 안 하나요?
댓글 불러오는 과정을 보고 있는데, 지금까지 각 모델(feed, comment) 전부 Firebase에서 전체 document 받아와서 list로 변환 후, update 하고나면 Firebase에 업로드하는데 그와 동시에 screen에 반영하기 위해 새로 get하여 list를 만들어서 표시해주는 것 같습니다. Firebase StreamBuilder를 사용하면 실시간으로 모든 변화들이 바로 업데이트 되어서 기존에 많이 썼는데, 혹시 이렇게 하지 않는 이유가 있을까요? (데이터 통신이 불필요하게 많이 일어나서 트래픽/요금 등의 문제가 있다든지 하는 현실적인 이유가 있는지 궁금했습니다)
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
flutter secure storage에 대하여
혹시 이 패키지는 단순히 토큰이나 보안 관련된 부분을 저장하기 위해 만들어진 패키지인가요?이전에 hive와 sql보다는 사용법이 조금 단순한 것 같아서 이 패키지를 이용하면 복잡하지 않은 가벼운 데이터 정도는 쉽게 저장할 수 있을 것 같아서 여쭤봅니다..!
-
해결됨Flutter 앱 개발 실전
riverpod 코드 변경 질문
안녕하세요. Provider 로 된 코드를 Riverpod 로 변경 해보려고 하면 벽에 부딪쳐네요. class CartService with ChangeNotifier { List<CartItem> _cartItemList = const []; List<CartItem> get cartItemList => _cartItemList; // 상품 목록 // 선택된 상품 목록 List<CartItem> get selectedCartItemList { return _cartItemList.where((cartItem) => cartItem.isSelected).toImmutable(); // cartItemList에서 isSelected 값이 true 항목만 불변 배열로 반환하는 Getter를 구현 } // 상품 추가 void add(CartItem newCartItem){ _cartItemList = [..._cartItemList, newCartItem].toImmutable(); notifyListeners(); } // 상품 수정 void update(int selectedIndex, CartItem newCartItem) { _cartItemList = _cartItemList.asMap().entries.map((entry) { return entry.key == selectedIndex ? newCartItem : entry.value; }).toImmutable(); notifyListeners(); /*** * 업데이트하고 싶은 항목의 인덱스인 selectedIndex에 해당하는 항목을 * 새로운 newCartItem으로 변경하여 새로운 불변 배열을 생성하도록 구현 */ } // 상품 삭제 void delete(List<CartItem> deleteList){ _cartItemList = _cartItemList.where((cartItem) { return !deleteList.contains(cartItem); }).toImmutable(); notifyListeners(); /*** * 삭제하고 싶은 목록을 deleteList로 전달받고, * 해당 배열에 들어있지 않은 CartItem만 남긴 불변 배열을 생성하도록 구현 */ } } 위 코드를 아래와 같이 변경하고자 일부 구현을 해보고 있습니다. 틀린 부분 수정 및 상품 수정 코드를 어떻게 추가해야 될까요?final cartProvider = NotifierProvider<CartNotifier, List<CartItem>>(CartNotifier.new); class CartNotifier extends Notifier<List<CartItem>> { @override List<CartItem> build() => const []; // 상품 목록 // 상품 추가 void add(CartItem newCartItem){ state = [...state, newCartItem]; // state 는 immutable 데이터이기 때문에 직접적으로 state 를 변경할 수 없다. } // 상품 삭제 void delete(List<CartItem> deleteList){ state = state.where((cartItem) => cartItem != deleteList).toList(); } // 상품 수정 void update(int selectedIndex, CartItem newCartItem) { // CartItem 에 유니크한 id 값이 없는 거 같고, 선택한 index 값으로 찾아서 update 해야 하는데 모르겠음. } /* state = [ for (final item in state) if (item.id == id) newCartItem else item, ]; */ // 선택된 상품 목록 List<CartItem> get selectedCartItemList { return state.where((cartItem) => cartItem.isSelected).toList(); } }
-
해결됨Flutter로 SNS 앱 만들기
저는 왜 signUp함수가 안나와요.
(사진)
-
해결됨Flutter 앱 개발 기초
flutter와 spring 조합 질문드립니다.
안녕하세요 강사님flutter를 이용한 앱 개발에 관해 궁금한게 있어서 글 올려드립니다. 2024년에 flutter를 이용해 가계부 앱을 하나 만들어 출시하는 것을 목표로 하고 있는데요현재 제가 다니는 회사의 backend가 java/spring 조합이기에웬만하면 익숙한 java/spring를 그대로 이용해 앱의 비즈니스 로직을 구현하고 싶어서요 즉, 아래의 조합으로 앱을 개발하고 싶은데요(web은 생각하지 않고 오직 모바일 app만 생각중입니다.)front-end : flutter / back-end : spring 혹은 spring-boot 혹시 제가 말씀드린 조합을 이용해 flutter app을 개발하는 것이 흔한(?) 경우인지 궁금합니다.google이나 youtube에 이와 관련된 내용을 찾아보니까 어느정도 나오기는 하는데원하는 만큼의 자료를 얻지 못 해서혹시 제가 생각하는 조합이 일반적인 방법이 아니어서 그런 것인지 의문이듭니다.오히려 'flutter nodejs' 로 검색을 하니까 유의미한 내용이 더 많이 나오더라고요 강사님 의견은 어떠신지 궁금합니다!!!추가로 front, backend 와는 별개로 DB는 postgresql 혹은 mongoDB 중 하나를 고민중인데SQL과 NoSQL이라 상반된 DB이긴 한데애초에 구상하고 있는 app이 그렇게 복잡하거나 대량의 데이터를 다루는 것이 아니기에 SQL과 NoSQL의 특성까지 고려할 수준은 아니라고 생각해서 후보군을 postgresql과 mongoDB로 좁혔는데이것 중 하나를 사용해도 무방한 개발 스펙일지도 궁금합니다! (혹시 몰라 말씀드리면 아직 커리큘럼 중 firebase 관련 강의는 듣지 않은 상태입니다!)
-
미해결Flutter로 SNS 앱 만들기
provider등록중 에러 발생 되었어요.
(사진)
-
해결됨[플러터플로우]코딩 없이 한 달 만에 앱 만들기
테스트할 때 primary color, 시간 이슈를 질의 드립니다.
테스트를 진행할 때 강사님께서 build 때 보다 test 가 빠르다 하셨는데 동일하게 2~4분 정도 걸리는데요, 무료 버젼이라 느린건가요 ? 테스트 할 때 primary color 를 초록색으로 변경했음에도 불구하고, 변경전인 파란색으로 나오는데요, 어떻게 수정하는지요 ? 답변 부탁드립니다. 감사합니다.
-
미해결[2024 최신] [코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
Navigator.of(context).pop(maxNumber.toInt()); 관련
Navigator.of(context).pop(maxNumber.toInt());을 사용하였을 때는 AndroidManifest.xml을 수정해야하는 오류가 발생하는데,Navigator.pop(context, maxNumber.toInt());을 사용하면 오류가 발생하지 않습니다. 어떤 차이가 존재하는겁니까?
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
CursorPaginationLoading 의 type cast 오류
type 'CursorPaginationLoading' is not a subtype of type 'CursorPagination<dynamic>' in type cast pagination-1 까지 잘 진행했는데 2~4까지 묶어서 실습하는 중 위와 같은 오류 때문에 계속 loading 바가 나옵니다. 다시 한번 소스코드를 강사님 강의를 보며 점검해 봤는데, 찾을 수가 없어 도움을 청합니다.