묻고 답해요
156만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결[플러터 상태관리] Bloc 마스터 코스 기초부터 응용까지!
flutter bloc 질문이 있어요
상태관리를 사용하려고 하는데bloc을 사용하는것까지는 알겠는데flame이란 sdk를 사용하는데여기서도 사용이 가능할까요?지금 봤을때 repository빼고는 사용이 불가할거 같아서요. 데이터 공유하는게 필요한데bloc은 위젯 상태에만 작동하는건가요?질문이 애매모호하긴 한데아직 저도 bloc를 제대로 사용안하고 겉핥기정도로만 봐서요. 궁금해서 적어봤습니다.이걸써야할지 말아야할지 고민중이라
-
미해결[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
151.다른 영상 선택하는 기능 추가하기
코드팩토리 디스코드에 질문하면 더욱 빠르게 질문을 받아 볼 수 있습니다![코드팩토리 디스코드]https://bit.ly/3HzRzUM - 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 다른영상 추가하기 버튼을 누르면 , PlatformException(VideoError, Video player had error androidx.media3.exoplayer.ExoPlaybackException...format_supported=NO_EXCEEDS_CAPABILITIES 이런 오류메시지가 출력됩니다.다른분이 질문란에 final XFile video; 멤버변수에서 final을 제어하면 된다고 해서 따라해봤는데, 안되더라구요. 아래와같이 initializeController 호출전에이미 초기화 되어있는지 확인하고 초기화되어있다면 videoPlayerController.dispose(); 를 호출하니 작동을 합니다. 강사님 소스 및 강의를 보면 이런 처리를 하지 않아도 정상 작동하는것같은데, 어떤부분이 문제인지 확인 부탁드립니다. 아래는 제가 수정한 initializeController() 함수 코드입니다. initializeController() async { if (mounted && videoPlayerController.value.isInitialized) { await videoPlayerController.dispose(); } videoPlayerController = VideoPlayerController.file(File(widget.video.path)); try { await videoPlayerController.initialize(); videoPlayerController.addListener(() { setState(() {}); }); setState(() {}); mounted = true; } catch (e) { debugPrint('비디오 초기화 실패 : $e'); } }
-
해결됨Flutter 앱 개발 기초
수강 기간 연장 문의
안녕하세요! 연초에 구매하였는데 사정이 있어 제대로 듣지 못했습니다.. ㅠㅠ 혹시 수강 기간 연장이 가능할까요?🥹
-
해결됨Flutter 초입문 왕초보편
webview import가 원활하지 않습니다 도와주세요
opt+enter를 수행하여 io import 까지는 똑같이 진행 되었는데요, 두번째 opt+enter를 진행할때는 강사님과 똑같이 메뉴가 뜨지 않네요 ㅠㅠplatform밑에 빨간밑줄이 생겨서 지금 수업을 따라서 진행하기가 어려운 상황입니다.수동을 import도 넣어보고, flutter clean, flutter pub get, Invalidate Cache & Restart도 여러차례 진행했구요.그래도 안되서 pubspec.yaml 파일 내에webview_flutter: ^4.13.0 밑에다가 webview_flutter_android: ^4.7.0 도 추가해보았습니다...이상한 부분이 있다면 계속 초록색 밑줄이 생기네요 왜 그럴까요..
-
해결됨Flutter 초입문 왕초보편
webview 버전
85강에 버전업 관련 내용이 있던데, 4.0.x 버전 관련인것 같더라구요.인강은 3.0.4로 강의 하시는 것 같은데...pub.dev가서 설치하려고보니 webview_flutter의 최신버전은 4.13.0인걸로 확인됩니다.4.13.0으로 설치하면 될까요??
-
해결됨Flutter 초입문 왕초보편
섹션3. 비만도계산기 문자열 입력가능 오류 관련
비만도 계산기 소스코드 작성중 null이나 빈값(empty)관련 예외처리는 있었으나, 문자열 관련 입력을 받을 수 없도록 하는 처리는 따로 없었던 것 같습니다.아마도 키보드 타입을 number로 제한을 두셨기 때문이었을 것이라 생각되는데요.입력폼에다가 커서를 둔 상태로 한영키(맥북에서 캡스락)을 누르면 문자열이 입력되는 것을 확인할 수 있었습니다.입력된 문자열이 있는 상태로 결과버튼을 누르면 빨간 에러화면(?) 같은 것을 확인 할 수 있었는데요.아래 사항들이 궁금하여 문의드립니다.자세한 사항은 아래 첨부된 세개의 이미지 참조 부탁드립니다. 빨간화면이 어떤 에러가 발생할 때 주로 뜨는 것인지?? (웹에서 404에러가 페이지를 표시할 수 없음화면이라던가... 그런 어떤 특정 오류 타입이 있는지 궁금하네요)맥os에서만 발생하는 오류인지, 윈도우os에서도 발생할 수 있는 오류인지??해당 오류를 완전히 막을 수 있는 방법이 있다면?? (string을 완전히 막아야 할까요??) 이미지가 한줄로 나열되지 않네요...
-
미해결Flutter 초입문 왕초보편
appbar 오류
appBar 를 영상처럼 그대로 따라했는데, 에뮬레이터에는 '홈'이란 글씨만 적혀있고 상단에 바가 나타나지 않습니다. 어떻게 해야할까요?
-
미해결Flutter 초입문 왕초보편
mac 사용자만 들으면 되는 강의인가요?
mac 사용자만 들으면 되는 강의인가요?
-
미해결Flutter 초입문 왕초보편
Error: Unable to find git in your PATH.
powershell에서 'flutter doctor' 쳤는데 에러가 뜨는데 어떻게 해야할까요?에러명 : Error: Unable to find git in your PATH. flutter sdk 설치, 안드로이드 스튜디오 설치, 환경변수 편집까지 영상과 동일하게 진행하였습니다.
-
미해결[플러터플로우] 실전! 앱 출시를 위한 끝장 노하우!
카카오 sdk를 이용한 로그인 및 로그아웃 관련
안녕하세요 ! 플러터 플로우로 앱 출시를 준비하고 있는 개발자 입니다.강의에서 제공해주신 코드들로 로그인 및 로그아웃 그리고 unlink를 이용한 회원 탈퇴 기능등을 적용 하였는데요!사용자가 로그아웃 후에 다시 로그인을 하면 firebase에서 사용자의 정보를 불러오지 못하는 오류가 있는것 같습니다.. 그런데 다시 로그인 화면으로 돌아갔다가 카카오로 로그인을 하면 사용자 정보를 잘 불러오는데 혹시 어떤 문제인지 짐작가시는 부분이 있으실까요??ㅠㅠ 구글이나 애플로그인 같이 정식적으로 지원하는 로그인 방법은 그런 이슈가 없는데, 카카오만 그런것 같아서 질문드립니다 ㅠㅠ
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
장바구니 결제하기 응답이 500이 옵니다.
장바구니 화면까지는 다 정상인데 결제하기 하면 500에러가 발생합니다... 이틀동안 찾았는데 원인을 모르겠습니다...ㅠㅠㅠㅠhttps://github.com/DongMinE/Flutter/tree/main/actual레포지토리 링크인데 도와주실 수 있으실까요...?요즘 질문이 많아 죄송합니다...마지막 강의까지 잘 듣겠습니다. 일단 강의는 계속 듣겠습니다!!
-
미해결[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
GET 메소드와 Body
246강 HTTP 이론 2:36 예시 그림에 body 부분이 표시되어 있는데, GET 메소드(와 DELETE 메소드)에는 body를 갖지 않는게 바람직합니다.규격에 정의되어 있지 않은 부분으로 에이전트에 따라 body 가 무시될 수 있기 때문입니다. 약간의 오해의 소지가 있으니, 이에 대한 설명이 추가되거나, 예시 메소드를 POST 로 바꾸면 좋지 않을까 하는 생각입니다. (포스트맨으로는 잘 되는데, 안드로이드 폰에서는 동작을 안해서 한참 헤메던 적이 있었어요 ^^)
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
removeFromBasket에서 await patchBasket()을 마지막에 하면 에러나는거 아닌가요?
Future<void> patchBasket() async { await repository.patchBasket( body: PatchBasketBody( basket: state .map((e) => PatchBasketBodyBasket( productId: e.product.id, count: e.count, )) .toList(), ), ); } Future<void> removeFromBasket({ // true면 count에 관계없이 삭제 bool isDelete = false, required ProductModel product, }) async { // 1) 장바구니에 상품이 존재할때 // 1-1) 상품의 카운트가 1보다 크면 -1 // 1-2) 상품의 카운트가 1이면 상품 제거 // 2) 장바구니에 상품이 존재하지 않을때 // 2-1) 즉시 함수 반환하고 아무것도 하지 않음 final exists = state.firstWhereOrNull((e) => e.product.id == product.id) != null; print('exists: $exists'); if (!exists) { return; } final existingProduct = state.firstWhere((e) => e.product.id == product.id); if (existingProduct.count == 1 || isDelete) { state = state.where((e) => e.product.id != product.id).toList(); } else { state = state .map( (e) => e.product.id == product.id ? e.copyWith( count: e.count - 1, ) : e, ) .toList(); } await patchBasket(); } 장바구니에서 삭제할 때 상품이 1개 있고 1개의 상품 주문갯수가 1일 때 삭제를 하게되면 해당id를 뺀 값들이 리스트에 담기게 되는데 그럼 장바구니는 전부 비어지게 됩니다. 그래서 스크린에서는 "장바구니 비어있습니다"가 나오는 것 까진 됩니다.이후 어쨋든 patchBasket은 실행되는데 이때 리스트가 비어 있으니 서버호출할 때 400 에러가 발생합니다.. 서버단에서 비어있는 장바구니를 보내면 정상응답으로 비어 있는 get요청을 받는 과정이 필요한게 아닌가 해서 여쭤봅니다!포스트맨에서도 빈 리스트를 보내면 400이 옵니다.좋은 주말 되세요!
-
미해결[Bloc 응용] 실전 앱 만들기 (책 리뷰 앱) : SNS 로그인, Firebase 적용, Bloc 상태 관리, GoRouter
Figma 디자인 링크는 어디서 받을 수 있을까요? ☺️
선생님, Figma 디자인 링크는 어디서 받을 수 있을까요? ☺강의에서 구현되지 않거나 추가로 개발해야하는 부분이 있다고 말씀해주셔서 혼자 공부하면서 디자인도 수정하거나 추가해보고 싶은데, Figma 디자인 링크 편집 권한도 받을 수 있을까요?
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
이 두가지는 완전히 동일한 기능인가요?
abstract class IModelWithId { final String id; IModelWithId({required this.id}); } 인터페이스를 선언시 똑같이 했는데@JsonSerializable() class ProductModel implements IModelWithId { @override final String id; final String name; @JsonKey(fromJson: DataUtils.pathToUrl) final String imgUrl; final String detail; final int price; final RestaurantModel restaurant; ProductModel({ required this.id, required this.name, required this.imgUrl, required this.detail, required this.price, required this.restaurant, }); factory ProductModel.fromJson(Map<String, dynamic> json) => _$ProductModelFromJson(json); } @JsonSerializable() class ProductModel extends IModelWithId { final String id; final String name; @JsonKey(fromJson: DataUtils.pathToUrl) final String imgUrl; final String detail; final int price; final RestaurantModel restaurant; ProductModel({ required this.id, required this.name, required this.imgUrl, required this.detail, required this.price, required this.restaurant, }) : super(id: id); factory ProductModel.fromJson(Map<String, dynamic> json) => _$ProductModelFromJson(json); } 이 두가지 모델은 기능적으로 완전히 동일한가요?동일하다면 구현방식은 개발자와 팀의 선호에 따라 달라지는 정도인지 궁금합니다. 그리고 인터페이스 키워드가 없다고 말씀하셨었는데 버전이 업되고 interface가 생긴것 같은데 지금과 같은 기능이면 abstract interface를 사용하는 것이 더 좋은가요? 질문을 많이 드려 죄송합니다 ㅠㅠ
-
미해결[Bloc 응용] 실전 앱 만들기 (책 리뷰 앱) : SNS 로그인, Firebase 적용, Bloc 상태 관리, GoRouter
TextFiled 키보드, rebuild 이슈 - review_write_page.dart
질문드립니다. :)review_write_page.dart 에서/////class _ReviewBox extends StatefulWidget { final String? initReview; const _ReviewBox({super.key, this.initReview}); @override State<_ReviewBox> createState() => _ReviewBoxState(); } class _ReviewBoxState extends State<_ReviewBox> { TextEditingController editingController = TextEditingController(); @override void didUpdateWidget(covariant _ReviewBox oldWidget) { super.didUpdateWidget(oldWidget); editingController.text = widget.initReview ?? ''; } @override Widget build(BuildContext context) { return TextField( maxLines: null, controller: editingController, decoration: const InputDecoration( border: InputBorder.none, hintText: "리뷰를 입력해주세요.", contentPadding: EdgeInsets.symmetric(horizontal: 25), hintStyle: TextStyle(color: Color(0xff585858)), ), onChanged: context.read<ReviewWriteCubit>().changeReview, style: const TextStyle(color: Colors.white), ); } }리뷰 작성 시,iOS 실기기에서 TextFiled에 텍스트를 입력을 하면 키보드가 내려가지 않습니다.이를 해결하기 위해서 FocusScope.of(context).unfocus();를 하면 키보드가 내려간다고 해서 Scafford 쪽에 GestureDetector onTap에 해당 함수를 호출하도록 했을 때는 TextFiled에 입력 텍스트가 없어지면서 초기화가 됩니다.Android 실기기에서 TextField에 텍스트를 입력하고 키보드를 내릴 수가 있어서 내리면 TextField에 입력한 텍스트가 사라지면서 초기화됩니다.어떻게 수정을 해야할까요? 🙂
-
미해결Flutter 초입문 왕초보편
60. 053. 결과화면 작성
result_screen.dart 페이지에 stl 까지 입력하여 자동완성된 코드에서부터 살짝 다르게 되어있었습니다.강사님께서는 "const ResultScreen ({Key? key}) : super (key: key); 라고 되어있었으나, 제 쪽 화면에는 const ResultScreen ({super.key}) ; 까지만 자동완성이 되어있어서 수동으로 남은 값을 채워넣어주고 진행했습니다만, "const ResultScreen ({Key?" 에서 Key 부분이 색상이 다르게 활성되어있어서 약간 찝찝한 마음이 들어서 어떤 부분 때문에 자동완성이 달랐는지 여쭙고자 문의남깁니다.
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
내부 코드를 작성하지 않은 CursorPaginationLoading가 어떻게 로딩상태를 갖는지 잘 모르겠습니다...
abstract class CursorPaginationBase {} //에러 class CursorPaginationError extends CursorPaginationBase { final String message; CursorPaginationError({ required this.message, }); } //로딩 class CursorPaginationLoading extends CursorPaginationBase {}여기까지 커서페이지네이션모델 파일을 만들었고 if (data is CursorPaginationLoading) { return Center( child: CircularProgressIndicator(), ); }로 로딩상태이면 인디케이터를 보여주고 있는 것 까지 완료했습니다.그리고 CursorPaginationBase는 여러 상태의 부모로 로딩,정상,에러 등을 받을 수 있다는 것은 알겠는데, 아직 로딩은 무엇이다라는 것이 없이 단지 CursorPaginationBase를 상속받았을 뿐인데 어떻게 screen에서 로딩중인 것을 확정하고 코드가 작동하는지 잘 모르겠습니다...
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
_SplashScreenState에서 storage를 late로 호출해서 한번만 불러와도 되나요?
강의에서는final storage = ref.read(secureStorageProvider);이 코드를 checkToken과 deleteToken에서 불러 사용하고 있는데 여러번 부르는 것이 싫다면class _SplashScreenState extends ConsumerState<SplashScreen> { late final storage = ref.read(secureStorageProvider); @override void initState() { super.initState(); //토큰 검사 checkToken(); // deleteToken(); }또는class _SplashScreenState extends ConsumerState<SplashScreen> { late final FlutterSecureStorage storage; @override void initState() { super.initState(); storage = ref.read(secureStorageProvider); //토큰 검사 checkToken(); // deleteToken(); }으로 한번만 불러서 storage를 바로 사용해도 될까요? 이렇게 사용해도 버그나 라이프사이클에 문제가 있을지 궁금합니다.강의 잘 듣고 있습니다!! 감사합니다.
-
미해결[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
build.gradle 오류? 사항
코드팩토리 디스코드에 질문하면 더욱 빠르게 질문을 받아 볼 수 있습니다![코드팩토리 디스코드]https://bit.ly/3HzRzUM - 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.build.gradle에서 code insight unavailable이라고 뜨는데 link gradle project에서 다른 외부 build.gradle을 연결해도 새로운 오류가 발생합니다. 연결을 안해도 되는 걸까요?