묻고 답해요
158만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨Flutter 중급 3편 - 의존성 주입 가이드
뷰 모델 분리하기
뷰모델을 분리하는 방법에 대해 질문 드립니다.하나의 scaffold (activity) 내에 여러개의 container (fragment : no scaffold) 가 있을 때 각각 프레그 먼트에 뷰모델을 사용하면 좋겠지만 부득이하게 상위 activity 뷰모델에 모든 프레그먼트의 로직을 담당해야 하는 상황에서 각 화면별로 뷰모델을 나누고자 합니다. swift 에서는 클래스 외부에 extension 으로 메소드 들을 기능별로 분리하여 사용하는 것을 알고 있고 dart 에도 extension 이 있어서 사용하려니 extention 할때 changenotifier 의 notifyListeners() 를 사용 할 수가 없어서 어려움을 겪고 있습니다. 다중상속도 지원하지 않기 때문에 어떻게 하면 좋을 지 조언 부탁드립니다. 감사합니다.
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
함수와 stless 클래스
안녕하세요!단어간 중간에 점을 찍는다던가, 아이콘을 텍스트와 묶어서 위젯으로 반환한다던가 하는 일을 할때,언제는 그냥 함수로 구현하고, 언제는 stless 클래스를 만들어서 build하는 형식으로 구현하는데,이 두가지 방법 중 선택하는데 기준이 있나요? 이 둘의 차이점을 크게 모르겠습니다.
-
해결됨Flutter 중급 3편 - 의존성 주입 가이드
네트워크 통신 에러 처리
안녕하세요. 수강 잘 하고 있습니다.dio package를 사용하여 네트워크 처리를 하고 있는데 에러 처리관련해서 어디 부분에서 하는 것이 좋을 지 고민하다가 질문 올립니다.현재는 viewmodel -> usecases -> usecase -> repository -> remoteDataSource -> dio 이렇게 의존성을 받고 있고, remoteDatasource 에서 필요한 데이터만 List<StudentModel> 이런식으로 뷰모델까지 보내고 있습니다. 그러나 네트워크 에러가 발생했을 때는 remoteDataSource에서 List<StudentModel> 이 아닌 실패했을 떄 모델을 전송하게 되는데 (ErrorModel) 그렇게 되면 뷰모델까지 타입이 동적으로 전해지기때문에 이게 맞나 생각이 들기도 합니다.혹은 dio 부분에서 400 500 에러 일때 alert 를 띄울까 생각을 했지만 그렇게 되면 context를 dio 까지 끌고 가야되고 전역으로 관리해야 되서 맞지 않다고 생각했습니다. 실제로는 어떻게 처리하는 것이 현명할지 질문드립니다. 감사합니다.
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
restaurant_repository.g.dart 에러가 발생했어요
이번 강의를 다 듣고 코드를 수정하였습니다만아래 restaurant_repository.g.dart 파일에 pagiante함수에서 queryParameters.addAll(paginationParams?.toJson() ?? <String, dynamic>{}); 이부분에 toJson이 에러가 납니다. 에러 내용은 paginationParams에 toJson 함수가 없어서 입니다.해당 강의에서 강사님 코드에서 toJson을 구현하지 않았는데 어떤 부분을 제가 놓친 것인지 모르겠습니다,@override Future<CursorPagination<RestaurantModel>> paginate( {paginationParams = const PaginationParams()}) async { const _extra = <String, dynamic>{}; final queryParameters = <String, dynamic>{}; queryParameters.addAll(paginationParams?.toJson() ?? <String, dynamic>{}); queryParameters.removeWhere((k, v) => v == null); final _headers = <String, dynamic>{r'accessToken': 'true'}; _headers.removeWhere((k, v) => v == null); final Map<String, dynamic>? _data = null; final _result = await _dio.fetch<Map<String, dynamic>>( _setStreamType<CursorPagination<RestaurantModel>>(Options( method: 'GET', headers: _headers, extra: _extra, ) .compose( _dio.options, '/', queryParameters: queryParameters, data: _data, ) .copyWith(baseUrl: baseUrl ?? _dio.options.baseUrl))); final value = CursorPagination<RestaurantModel>.fromJson( _result.data!, (json) => RestaurantModel.fromJson(json as Map<String, dynamic>), ); return value; }
-
미해결[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
? : 구문을 if문으로 바꾸기
안녕하세요 강사님! if (isWithinRange) Icon( Icons.timelapse_outlined, size: 50.0, color: commuteDone ? Colors.green : isWithinRange ? Colors.blue : Colors.red, ), google Map 활용 강의 중 이 코드를 if 문으로 바꾸려면 어떻게 수정하면 좋을까요?
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
왜 강의에 많은 부분이 생략된 것 같죠??
영상이 원래 이 분량인가요?로그인하는 부분을 구현한 적 없는데 갑자기 로그인이 구현되어 있어서 조금 당황스럽네요..ㄷㄷ혹시 제가 놓친 강의가 있나요?
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
차후 강의관련 질문사항입니다.
제발 파이어베이스를 플러터를 연동해서 앱을 만드는 강의 찍어 올려주시면 안될까요? 제발제발요 따로 강의내셔도 결제하고 들을게요 ㅠㅠ
-
해결됨Flutter 앱 개발 기초
4장 Travia를 이용해서 다른 api에 적용 한줄 가져오려고합니다.
Future<String> getNumberTrivia() async { // get 메소드로 URL 호출 Response result = await Dio().get('https://api.adviceslip.com/advice'); var trivia = result.data['advise']; // 응답 결과 가져오기 print(trivia); return trivia;4장 Travia를 응용해서Json 원본 .. {"slip": { "id": 65, "advice": "When having a clear out"} //한줄 나오는데 분해가 안되네요...두번째 값 문장만 가져 오려면 어떻게 해야하나요?" 이것도 json decode 해야하나요."When having a clear out" ./.....Response result = await Dio().get('https://api.adviceslip.com/advice', queryParameters: {"slip": "advice"},); //이해를 못한건지 .. 쿼리를 넣엇는데 print {"slip": { "id": 224, "advice": "Don't drink bleach."}} Response result = await Dio().get('https://api.adviceslip.com/advice'); final trivia = result.data; // 응답 결과 가져오기 Map<String, dynamic> user = jsonDecode(trivia); print(user.runtimeType); print(user["slip"]); return trivia; _JsonMap{id: 46, advice: Try going commando to an important meeting, NB: don't wear a skirt.} print(user["advice"]); _JsonMapNull { "slip": { "slip_id": "2", "advice": "Smile and the world smiles with you. Frown and you're on your own." } }
-
해결됨Flutter 앱 개발 기초
required this.job vs this.job 차이저미 궁금해요
Bucket(this.job, this.isDone); // 생성자 과 차이점과 유의사항이 궁금합니다. . 형식이 정해지지 않았다 정도로 이해 했었는데요. 저는 아직 잘 모르겠습니다. ^^) __) Bucket({ required this.job, required this.isDone} ); // 생성자
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
로그인 방식에도 차이가 있나요?
안녕하세요 코팩님 로그인 처리시 로그인 방식에 차이가 있는지 여쭈어 보고 싶습니다. 강의에서는 refresh token과 access token을 이용한 방식을 사용하는걸로 알고 있는데요..현재 저희 회사에서 진행하고 있는 프로젝트에서 선임분께서는 다음과 같은 방식으로 로그인 코드를 작성하였는데요.. 무슨 차이인지 여쭈어보고 싶습니다.[login.Screen.dart]
-
미해결Flutter 응용 - 공공 API를 활용한 앱 만들기 (MVVM 패턴)
json 데이터
https://gist.githubusercontent.com/junsuk5/bb7485d5f70974deee920b8f0cd1e2f0/raw/063f64d9b343120c2cb01a6555cf9b38761b1d94/sample.json?lat=37.6255182&lng=127.017747&m=5000https://gist.githubusercontent.com/junsuk5/bb7485d5f70974deee920b8f0cd1e2f0/raw/063f64d9b343120c2cb01a6555cf9b38761b1d94/sample.json body 부분이 같은데 왜그럴까요?? 쿼리문이 작동하지 않고 전체 데이터가 나오네요
-
미해결[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
DB선택을 하려는데 궁금해서요
Realm이라는것을 알게되었습니다.sqlite하고 비교를 많이 하는거 같던데 ;;; 개념이 이해가 잘 안되서요.sqllite가 RDBMS 경량화버전이라면 Realm은 Nosql(몽고DB) 경량화버전인가요?전 취미활동 게시판앱+웹을 만드는목표인데요. 처음접한 nodejs+mongDB로 공부를 계속 해왔습니다. 그래서 플러터로 mongoDB 붙여서 쓸려고하니 Realm이라는게 mongoDB 인수 되었다고하고 서비스도 같은 홈페이지내에서 서비스가 되더라구요. DB쪽은 공부를 안해놔서 RDBMS 쪽으로 가라면 당장엔 ... 못갈거 같아요. 요약1.플러터에 붙일 DB는 Realm vs mongoDB 뭐가 더 좋은가요?2.앱은 API를 써야한다고하는데 파이어베이스도 그것일단 빼고 ...... 혹시나 해서그런데 Realm은 API하고 하등 상관이 없는거죠?
-
미해결처음하는 플러터(Flutter) 기초부터 실전까지 [풀스택 Part4] (쉽고 견고하게 단계별로 다양한 프로젝트까지)
명령어 프롬프트에서 에러
12분 50초 쯤에서 나오는터미널에 명령어 입력하는 부분이 안되네요.윈도우 사용중이고 디렉토리 루트까지는 갔는데 그 후에 flutterfire 라는게 내외부 명령을 실행할수 있는 배치파일이 아니라고 떠요ㅠ
-
해결됨[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
디스코드관련
안녕하세요유료강의구매시 디스코드 프리미엄채널에 추가관련해서메시지를 보냈는데 답이없으셔서 글남깁니다.
-
해결됨Flutter 앱 개발 기초
궁금합니다. shared preferences 에 List 저장/ Dialog 에서 확인시 . 삭제하기
선생님 ~ 3강 진행중입니다.[ 1.shared preferences 에 List 저장하는게 궁금합니다.[ 2. 이미지 깨지는 URL 수정이 필요해 보입니다.
-
미해결Flutter 초입문 왕초보편
안드로이드 스튜디오 화면이 저는 다릅니다..!
위와 같은 디바이스 선택이나 main dart같은 항목이 없습니다. 또한 플러터 프로젝트를 생성할때 기본으로 있는 앱또한 저는 안보입니다.환경은 m1 맥입니다.
-
미해결[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
세팅하기 질문입니다.
"세팅하기" 강의의 8분에서 meta-data를 넣는데요 pubdev에서 <manifest ... <application ... <meta-data android:name="com.google.android.geo.API_KEY" android:value="YOUR KEY HERE"/> 이렇게 써져있는데 <application> 이 괄호(<>) 안에 meta-data를 넣으라는 말이 아니라 아래에 넣으라는 말인건가요?
-
미해결[코드팩토리] [중급] Flutter 진짜 실전! 상태관리, 캐시관리, Code Generation, GoRouter, 인증로직 등 중수가 되기 위한 필수 스킬들!
Sliver 를 사용한 이유.
ListView 대신에 Sliver 를 사용하신 이유가 먼가요?어떤 걸 써도 동일한 효과인가요?
-
미해결[코드팩토리] [초급] Flutter 3.0 앱 개발 - 10개의 프로젝트로 오늘 초보 탈출!
디바이스별 비율 적용
안녕하세요! 너무 좋은 강의 감사합니다. 아이폰, 안드로이드 폰 기기별 사이즈와 비율이 다른데 어떻게하면 기기별 비율에 맞게 맞출 수 있나요? 예를 들어 아이콘 사이즈가 39*39 인데 (디자이너 기준 아이폰 12프로) 아이폰 13미니에서는 아이콘 사이즈, 텍스트 위젯등 모두 비율에 맞게 작아져야하는데 방법을 모르겠습니다.
-
미해결Flutter 입문 - 안드로이드, iOS 개발을 한 번에 (with Firebase)
Failed assertion: line 246 pos 15: 'items.length >= 2': is not true.
import 'package:flutter/material.dart'; class TabPage extends StatefulWidget { const TabPage({super.key}); @override State<TabPage> createState() => _TabPageState(); } class _TabPageState extends State<TabPage> { @override Widget build(BuildContext context) { return Scaffold( bottomNavigationBar: BottomNavigationBar( items: const [ BottomNavigationBarItem(icon: Icon(Icons.home), label: 'Home'), ], ), ); } }이 부분에서 코드를 작성한 후 실행하면======== Exception caught by widgets library =======================================================The following assertion was thrown building TabPage(dirty, state: _TabPageState#63dc1):'package:flutter/src/material/bottom_navigation_bar.dart': Failed assertion: line 246 pos 15: 'items.length >= 2': is not true.The relevant error-causing widget was: TabPage TabPage:file:///C:/Users/user/StudioProjects/instagram/lib/main.dart:21:19When the exception was thrown, this was the stack: #2 new BottomNavigationBar (package:flutter/src/material/bottom_navigation_bar.dart:246:15)#3 TabPageState.build (package:instagram/tab/tabpage.dart:14:28)#4 StatefulElement.build (package:flutter/src/widgets/framework.dart:5409:27)#5 ComponentElement.performRebuild (package:flutter/src/widgets/framework.dart:5297:15)#6 StatefulElement.performRebuild (package:flutter/src/widgets/framework.dart:5462:11)#7 Element.rebuild (package:flutter/src/widgets/framework.dart:5016:7)#8 ComponentElement._firstBuild (package:flutter/src/widgets/framework.dart:5279:5)#9 StatefulElement._firstBuild (package:flutter/src/widgets/framework.dart:5453:11)#10 ComponentElement.mount (package:flutter/src/widgets/framework.dart:5273:5)... Normal element mounting (220 frames)#230 Element.inflateWidget (package:flutter/src/widgets/framework.dart:4182:16)#231 MultiChildRenderObjectElement.inflateWidget (package:flutter/src/widgets/framework.dart:6569:36)#232 MultiChildRenderObjectElement.mount (package:flutter/src/widgets/framework.dart:6581:32)... Normal element mounting (467 frames)#699 Element.inflateWidget (package:flutter/src/widgets/framework.dart:4182:16)#700 Element.updateChild (package:flutter/src/widgets/framework.dart:3707:18)#701 RenderObjectToWidgetElement._rebuild (package:flutter/src/widgets/binding.dart:1253:16)#702 RenderObjectToWidgetElement.mount (package:flutter/src/widgets/binding.dart:1222:5)#703 RenderObjectToWidgetAdapter.attachToRenderTree.<anonymous closure> (package:flutter/src/widgets/binding.dart:1169:18)#704 BuildOwner.buildScope (package:flutter/src/widgets/framework.dart:2719:19)#705 RenderObjectToWidgetAdapter.attachToRenderTree (package:flutter/src/widgets/binding.dart:1168:13)#706 WidgetsBinding.attachRootWidget (package:flutter/src/widgets/binding.dart:1001:7)#707 WidgetsBinding.scheduleAttachRootWidget.<anonymous closure> (package:flutter/src/widgets/binding.dart:981:7)#711 RawReceivePort.handleMessage (dart:isolate-patch/isolate_patch.dart:189:12)(elided 5 frames from class AssertionError, class Timer, and dart:async-patch)====================================================================================================D/ProfileInstaller(12980): Installing profile for com.example.instagram 이런 에러가 계속 발생하는데 어떤 식으로 해결해야 할까요??