묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨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의 버전을 다운그레이드하라는 메세지가 떴습니다... 알려준대로 다운그레이드하거나 업그레이드 진행해도 될까요?
-
미해결[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
WillPopScope 이제 안쓰이는거 같네여
PopScope로 쓰이는거 같네여 - 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.코드팩토리 디스코드https://bit.ly/3HzRzUMFlutter 강의를 구매하시면 코드팩토리 디스코드 서버 플러터 프리미엄 채널에 들어오실 수 있습니다! 디스코드 서버에 들어오시고 저에게 메세지로 강의를 구매하신 이메일을 보내주시면 프리미엄 채널에 등록해드려요! 프리미엄 채널에 들어오시면 모든 질의응답 최우선으로 답변해드립니다!
-
미해결[코드팩토리] [초급] 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등록중 에러 발생 되었어요.
(사진)
-
해결됨[2025 리뉴얼]플러터플로우로 코딩 없이 한달 안에 앱 만들기
테스트할 때 primary color, 시간 이슈를 질의 드립니다.
테스트를 진행할 때 강사님께서 build 때 보다 test 가 빠르다 하셨는데 동일하게 2~4분 정도 걸리는데요, 무료 버젼이라 느린건가요 ? 테스트 할 때 primary color 를 초록색으로 변경했음에도 불구하고, 변경전인 파란색으로 나오는데요, 어떻게 수정하는지요 ? 답변 부탁드립니다. 감사합니다.
-
미해결[코드팩토리] [초급] 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 바가 나옵니다. 다시 한번 소스코드를 강사님 강의를 보며 점검해 봤는데, 찾을 수가 없어 도움을 청합니다.
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
JsonSerializable에 toJson 에서 List<String>이 실제 Get으로 전달시 이상하게 전달됩니다
강사님 강의를 쭉 보고, 앱을 개발 해보고 있는데요. 모델에 List<String>이 있고, toJson으로 생성해서GET 형태로 서버로 보냈는데, List<String>에 'aaaa', 'bbbb'라는 값이 있을때, name=aaaa&name=bbbb 라고, 중복된 변수명을 가지고 생성이 되어서 서버로 전송하더군요. 이렇게 생성되는게 정상적인 형태인가요?아니면, 옵션 같은걸 넣어야하는건지, 몰라서 문의드립니다.
-
해결됨Flutter 앱 개발 기초
Food Rceipe실습에서 DrawerHeader에 관해서 질문 있습니다
예제에 있는대로 쳤는데 오류가 나서 마우스를 올려보니child위젯이 reqired라고 되어 있습니다.그 다음 바로 뇌정지가 와서 어찌할줄 모르는 상태입니다 허허...