월 24,200원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결Flutter 중급 1편 - 클린 아키텍처
프리즈 빌드 하면 항상 파일이 생기는데 왜 선생님께서는 안생기는걸까요?
프리즈 빌드 하면 항상 파일이 생기는데 왜 선생님께서는 안생기는걸까요?
- 미해결Flutter 중급 1편 - 클린 아키텍처
insert 시 viewmodel내 모델 클래스를 이용한 insert data 준비?
안녕하세요. 강사님.. 덕분에 강의 잘 듣고 개별 프로젝트도 잘 진행하고 있는데요 몇가지 질문을 드릴려고 합니다. 1. note를 신규로 insert 할때 add_edit_view_model에서 파라미터로 전달받은 id, title, content 를 가지고 신규 note를 만들어서 insert를 하고 있는데요 제가 지금 만들려고 하는 앱에서는 등록을 하는 페이지가 3개로 나누어져 있습니다. 1번페이지에서는 type 을 위한 값을 셋팅하고 2번 페이지에서는 기본정보(이름, 제목, 라디오 버튼 값, 이미지 경로) 3번 페이지에서는 부가정보 (체크박스를 통한 값, 소개글 등등) 이렇게 등록하는 페이지가 한페이지가 아닌 3 페이지로 나누어져 있고 3페이지에 입력된 모든 값을 이용해서 마지막페이지에서 등록을 시키려고 하는데요 이런경우에도 강사님께서 개발하신 방법처럼 addEditNoteViewModel내 color를 선언하시고 이용했던것 처럼 각 input 값, radio값, 체크박스, 이미지 경로등 여러가지 변수를 선언해두고 유사한 방식으로 해야 할까요? 이렇게 되면 선언해지는 변수가 많아지게 되어서요.. 아니면 note 라는 빈 모델을 생성해두고 각 등록페이지에서 입력된 값을 계속 이벤트?로 받아서.. 빈모델에 하나씩 채워가고 이를 나중에 최종 저장할때 사용하는 방식으로 해도 될까요? 이게 맞다면 이를 위한 예제를 한번 보여주시면 정말 감사하겠습니다. 2. 그리고 3개의 페이지로 나누어진 등록화면에서 각 1개의 등록페이지에서 입력된 값을 계속 저장해두고 2페이지 -> 1페이지, 3페이지 -> 2페이지로 넘어갔을때 이전 페이지에 입력한 값을 그대로 유지 시켜서 노출하고 싶은데 이럴때는 input에 입력된 값을 viewmodel내 빈 model을 만들어 담아두고 사용해야 할까요?? 두서 없이 질문을 좀 드렸는데 답변 부탁드리겠습니다. 감사합니다.
- 미해결Flutter 중급 1편 - 클린 아키텍처
정렬기능 추가 후 앱 재시작시
정렬 기능 추가 후, 정상 작동하는 거 확인 완료하고 수강 완료했는데 이후, 다시 앱을 재시작 해보니 첫 화면에서 doUpdatePositionAsync is called and callVoidMethod 로그가 찍히면서 리스트가 나오지 않습니다. 로딩 이후에는 정렬탭을 열고 직접 변경하면 이 때 리스트가 나오는데 어느 부분에서 다시 확인해야할까요?
- 미해결Flutter 중급 1편 - 클린 아키텍처
widget build private 함수 멀티 호출
안녕하세요. 강의코드중 궁금한게 몇가지 있어서 질문드립니다. 1. add_edit_note_screen.dart 파일에서 param 값인 selected와 color를 콘솔에 찍어보면 한번 클릭시 여러번의 로그가 쌓이는데요.. 색상 변경시 _buildBadkgroundColor() 함수가 여러번 호출이 되어서 그런건지 color의 갯수만큼 로그가 찍히는데요..정상인건가요? 2. 다른 강의에서도 설명해주신 내용으로 자체 개발을 진행해보고 있는데요.. di/ provider_setup.dart 파일을 구성할때 가령 msa 구조로 product, order 이렇게 모듈로 나누어져 있고 product 모듈에서 쓰는 여러 api 및 use_case, order에서 쓰는 여러 api 및 use_case가 있을텐데요.. 이렇게 앱이 규모가 커졌을때 provider_setup 파일에 각 모듈에 해당하는 productAPI 및 use_case를 다 정의해줘야 하는지 아니면 다른 방법이 있는지 궁금합니다. ProxyProvider<http.Client, PixabayApi>( update: (context, client, _) => PixabayApi(client),),ProxyProvider<PixabayApi, PhotoApiRepository>( update: (context, api, _) => PhotoApiRepositoryImpl(api),),ProxyProvider<PhotoApiRepository, GetPhotosUseCase>( update: (context, repository, _) => GetPhotosUseCase(repository),), 이전에 이렇게 pixabayapi 및 use_case가 1개라 위와 같이 선언이 되었는데요.. pixabayapi 외에도 또 다른 productapi, orderapi 가 존재하는 경우, 그리고 각 product 모듈내에 GetPhotoUseCase 처럼 하나가 아닌 여러 useCase가 존재할때 같은 방식으로 각 useCase별로 여러번 위와 같이 선언을 해야 하나요? ProxyProvider<http.Client, PixabayApi>( update: (context, client, _) => PixabayApi(client),), ProxyProvider<PhotoApiRepository, GetPhotosUseCase>( update: (context, repository, _) => GetPhotosUseCase(repository),),//product API ProxyProvider<http.Client, ProductApi>( update: (context, client, _) => ProductApi(client),), //여러개 use case일때?????? ProxyProvider<ProductApiRepository, GetProductUseCase>( update: (context, repository, _) => GetProductUseCase(repository),), ProxyProvider<ProductApiRepository, GetProductDetailUseCase>( update: (context, repository, _) => GetProductDetailUseCase(repository),), ProxyProvider<ProductApiRepository, UpdateProductDetailUseCase>( update: (context, repository, _) => UpdateProductDetailUseCase(repository),),.... usecase별로 다 생성이 필요한거죠???
- 미해결Flutter 중급 1편 - 클린 아키텍처
Freezed 질문 드립니다.
항상 답변 주셔서 감사합니다. 이해가 서툴러서 이리저리 다시 보고있습니다. 혹시 map 형태의 json은 어떻게 받아오나요? diary라는 List<Map<String, dynamic> 안에 today, month 이렇게 두가지 key가 있다고 하면 어떻게 작성하면 될까요?그리고 한 가지 더 질문드립니다.값을 사용할 때도 있고, 아닐 때도 있는데, 해당 값이 null이 들어올 수 있는 경우에는 값을 선언할 때 (영상에서 final int id; final String tag;) 값들을 nullable하게 타입 뒤에 ? 를 붙여야하나요? 아니면 그냥 똑같이 하면 되나요??
- 미해결Flutter 중급 1편 - 클린 아키텍처
final에 관한 질문
런타임 중에 값이 불변하게 하는게 final이라고 듣기만 했었는데, 어떨 때는 값이 들어가고 어떨 때는 안되는 건지 기준이 헷갈립니다. 살짝 설명해주실 수 있을까요?
- 미해결Flutter 중급 1편 - 클린 아키텍처
초보적인 질문 드립니다.
로직과 기능을 View에서 ViewModel로 분리 해야 한다고 하셨는데, View에서 들어가는 조건들은 어디에다가 나누면 되나요? 예를 들어서 디바이스의 너비에 따라 다른 위젯을 보여주는 것을 1. 너무 길어지면 함수로 분리하나요? 2. 분리 한다면 같은 View 파일에 남겨놓나요? 아니면 다른곳(VM?)으로 옮기나요?
- 미해결Flutter 중급 1편 - 클린 아키텍처
Api 서버와 관련해서 질문드립니다
우선 너무 좋은 강의 해주셔서 감사합니다. 프로그램 구성으로 헤매던 중에 너무 큰 도움이 되었습니다. 강의를 다 듣고 궁금증이 생겨서 질문을 드리게되었습니다. 혼자서 백엔드 api서버와 앱으로 구성되어있는 프로그램에서 풀스택으로 개발한다고 한다면, 혹은 앱기획자의 관점에서 앱을 기획한다고 했을 때, 서버와 클라이언트에 이러한 클린아키텍쳐를 통합해서 생각해야하는걸까요? 아니면 백엔드의 아키텍쳐, 클라이언트 단의 아키텍쳐를 별개로 구성을 해야하는지 궁금합니다. 예를 들어 domain의 use_case를 http endpoint로 나누어서 백엔드 서버에서 구현한다면, domain과 data를 프론트엔드에서 구현하지 않아도 되는걸까요? 이렇게 되면 프론트엔드 테스트 시 백엔드에 의존하게 되어 테스트가 힘들어지지 않을까도 생각해보고.. 현재 서버와 앱을 혼자서 만들다가 막히는 단계에서 실무적인 부분이 부족한지라 혼란스러운것 같아 질문을 드리게되었습니다.. 감사합니다..!
- 미해결Flutter 중급 1편 - 클린 아키텍처
sqlite db 확인하는법
안녕하세요 데이터가 잘 저장되고 있나 , 어떻게 저장되나 이런걸 확인하고싶은데 혹시 어떻게 확인하는지 알 수 있을까요? sqlite browser가 워크벤치역할을 하는것까지는 알았는데, db파일을 어떻게 오픈할수있는지를 모르겠습니다..
- 미해결Flutter 중급 1편 - 클린 아키텍처
테스트 범위 질문드립니다.
핵심 로직을 테스트하기 위해 가짜목을 사용하는 것은 이해했는데요. 최종단의 client가 실제 정상 통신하는지까지의 테스트는 통상적으로 하지 않는 것인가요? 예를들어 api를 제공하는 벤더사에서 응답 데이터의 형태를 바꾸거나 api uri 규칙을 바꾸게 되면 실제 앱은 오류를 뱉을텐데 이런 부분은 어떤식으로 테스트 전략을 짜야하는지 궁금합니다.
- 해결됨Flutter 중급 1편 - 클린 아키텍처
중복된 페이지에서 같은 ViewModel이 여러 개 필요할 때
강의에서 ViewModel은 provider_setup.dart 파일을 별도로 만들어서 의존성 주입을 해줬는데요. 중복된 페이지에서 페이지별로 ViewModel이 필요할 때는 어떤 방법이 좋을까요? 예를 들어, FeedPage가 있는데 이 FeedPage에는 새로운 FeedPage를 여는 버튼이 있을 수 있습니다. 이 버튼을 누르면 새로운 FeedPage가 열리는데 1번 FeedPage에서 2번 FeedPage를 여는 식이죠. 추가적으로 3번, 4번 등 계속해서 새로운 FeedPage를 열 수 있고요. 이때, FeedPage의 상태를 FeedViewModel에서 관리해야 하는데 중첩된 FeedPage가 4개면, 총 4개의 FeedViewModel이 필요한데 강의처럼 최상위에서 하나의 ViewModel만 생성하면 이게 어렵더라고요. class FeedPage extends StatelessWidget { const FeedPage({Key? key}) : super(key: key); @override Widget build(BuildContext context) { final viewModel = FeedViewModel(); return ChangeNotifierProvider<FeedViewModel>.value( value: viewModel, child: Scaffold(...), ); }} 제가 생각한 방법은 최상위에서 하나의 ViewModel만 생성하는 게 아니라 FeedPage의 build() 안에서 각자 ViewModel을 생성하고, 페이지 전체를 Provider로 감싸서 하위 위젯에 의존성을 주입하는 건데 괜찮은 방법일까요, 아니면 혹시 더 나은 방법이 있을까요?
- 미해결Flutter 중급 1편 - 클린 아키텍처
sqlite 와 key-value storage 중복 사용 가능 여부
혹시 SQflite(데이터베이스)와 key-value storage(예를 들어, Get storage or Shared-preferences)를 같이 사용가능한지 알고 싶습니다.JWT를 포함한 유저정보를 저장해야하는데, 이것을 데이터베이스 테이블로 만들면 Me Table이런식으로 Row가 하나짜리인 테이블을 만들어야할것같고, 앱시작할때마다 불러와야할 jwt가 있어서 이부분은 퍼포먼스적으로도 key-value스토리지를 쓰는게 나은선택일것같은데, 플러터에서 SQlite와 key-value storage를 같이 쓸 수 있는지 알고싶습니다. 만약, 안된다면 Row가 하나인 유저정보 테이블을 만드는게 최선일까요... 보통 이런경우 실무에서나 강사님은 어떤식으로 구현하는지 알고 싶습니다.요약 1. 플러터에서 SQlite와 key-value storage를 같이 쓸 수 있는지 알고싶습니다. 2. Row가 하나인 유저정보 테이블을 만드는게 최선인지, 보통 이런경우 실무에서나 강사님은 어떤식으로 구현하는지 알고 싶습니다. 강의와는 관련없는 질문이지만 답변해주시면 정말 감사하겠습니다.
- 미해결Flutter 중급 1편 - 클린 아키텍처
sqlite 라이브러리 질문
https://flutter-ko.dev/docs/cookbook/persistence/sqlite 공식문서보면 보면 sqlite랑 path랑 같이 사용하라고 되어있는데, 같이 사용해야하는건가요?? 그렇다면 이유가 뭔지, 그리고 path_provider이라는 더 인기가 많은 패키지가 있던데, sqlite랑 path대신 path_provider을 써도되는지도 궁금합니다!
- 해결됨Flutter 중급 1편 - 클린 아키텍처
components의 역할 질문
화면에서 좀 복잡한 UI일 경우, components라는 폴더로 따로 빼서 관리하시던데요. components에 있는 위젯에서는 viewModel에 직접적으로 접근하지 않고, 상태 값이나 상태를 변경할 수 있는 함수는 screen에서 받아서 사용하도록 하시던데 components에서 viewModel에 직접 접근하면 안 되는 건지, 그 이유가 무엇인지 알 수 있을까요?
- 해결됨Flutter 중급 1편 - 클린 아키텍처
클린 아키텍처, MVVM 여러 질문
안녕하세요. 좋은 강의 잘 보고 있습니다. 예전부터 클린 아키텍처, MVVM 관련 문서나 영상을 보고 실무에 적용하려다가 막힌 적이 있는데 본 강의를 보고도 여전히 의문이 풀리지 않아 질문드립니다. 먼저 전역 데이터 관리인데요. 특히 로그인 사용자 정보를 어떻게 관리해야 하는지가 제일 어려운 것 같습니다. 로그인 사용자 정보는 앱 전체적으로 쓰일 수 있기 때문에 어딘가에 저장하고 있어야 한다고 생각하는데요. 클린 아키텍처에서 상태를 저장하는 요소는 ViewModel(or State)인데 이건 특정 View에 종속적인 요소라 알맞지 않다고 생각하거든요. 하나 생각나는 방법은 SharedPreferences 같은 외부 영구 저장소에 저장해놓고, 로그인 사용자 정보가 필요한 곳마다 ViewModel에서 UseCase(Reposity)를 통해 그 데이터를 가져오는 것인데, 한 번만 불러와서 메모리에 올려놓고 사용하면 되는 것을 매번 외부 저장소에 데이터를 요청하는 게 과연 옳은 건지 모르겠습니다. 1번과 이어지는 것 같은데 또 하나는 토큰입니다. 토큰은 토큰이 필요한 API 요청이 있는 DataSource 전체에 공유돼야 하는데 이 토큰은 보통 로그인할 때 받아오게 되죠. 앞서 로그인 사용자 정보와 같이 SharedPreferences에 저장해놨다가 매번 가져오는 것도 이상하고, 특히 같은 DataSource에서 다른 DataSource에 요청하는 건 클린 아키텍처, MVVM에 맞지 않다고 생각하거든요. 이 역시 하나 생각나는 방법은 1번에도 적용할 수 있는 방법인데 클린 아키텍처의 요소 어디서든 접근할 수 있는 외부의 전역 객체를 하나 선언해놓고, 거기에 저장해뒀다가 꺼내 쓰는 방법인데 이 방법 역시 과연 클릭 아키텍처, MVVM에 맞는 방법인지 모르겠습니다. ViewModel과 UseCase의 역할 구분이 어렵습니다. 예를 들어 어떤 게시글 리스트를 보여주는 화면이 있을 때, 그 게시글 리스트 중에서 내가 쓴 글일 경우에만 특정 버튼을 노출하고 싶다면 그 글이 내 글인지 확인하기 위해 bool isMine(Post post)와 같은 메소드를 이용해야 할 텐데요. ViewModel에서 로그인 사용자 정보를 가져와서 저 메소드를 구현하는 것과 저 메소드를 구현한 UseCase를 만들어서 사용하는 것 중에 뭐가 나은 방법일까요? ViewModel에서 위젯을 정의하고 사용해도 될까요? 예를 들어 submit() 함수가 있다 했을 때, 이 submit() 함수가 끝나면 AlertDialog를 출력해서 알려주고 싶은데 그 AlertDialog를 어디에서 선언하고, 사용하는 게 나을까요? Event와 Stream을 이용해서 View에서 정의하고, 처리하는 게 나을까요? 적다 보니 질문이 꽤 길어졌네요. 정리한다고 정리했는데 잘 전달이 됐는지 모르겠습니다. 긴 글 읽어주셔서 감사하고, 많은 조언 부탁드립니다.
- 미해결Flutter 중급 1편 - 클린 아키텍처
강의 8분 30초경부터 질문
1. json Response['hits'] 는 jsonDecode가 된상태여서 JSON이 아닌 Array형태 아닌가요? 2. Iterable hits = jsonResponse['hits']; <-- 이게 현재 Map형태라고 하셨는데, 배열의 형태아닌가요? 만약 Map형태라면 hits.map 혹은 hits.forEach같은 JS 언어에서는 배열에서만 쓸수있는 함수를 Dart 언어에서는 객체형태에도 사용가능한건가요?
- 미해결Flutter 중급 1편 - 클린 아키텍처
모델클래스 정의해주는 이유
모델 클래스 정의 해주는 이유가 타입지정인가요?? 모델 클래스를 만들어주는 이유가 궁금합니다..
- 해결됨Flutter 중급 1편 - 클린 아키텍처
navigator 2.0 관련 적용
안녕하세요 좋은 강좌를 보고 있습니다. 클린 아키텍쳐를 구현하는 로직을 보고 있는데 기존 추가된 네비게이터 2.0 언급이 없어서.. 그러는데 관련 내용도 추가 가능 할까요?
- 미해결Flutter 중급 1편 - 클린 아키텍처
24강 test 오류 관련 문의 입니다.
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. package:sqflite_common_ffi/src/isolate.dart 40:9 SqfliteIsolate.handle SqfliteFfiException(error, Invalid argument(s): Failed to load dynamic library 'sqlite3.dll': error code 1907354296}) DatabaseException(Invalid argument(s): Failed to load dynamic library 'sqlite3.dll': error code 1907354296) 오류가 생깁니다. 혹시 해결 방법이 있을까요?
- 미해결Flutter 중급 1편 - 클린 아키텍처
freezed, sealed class 자동완성
안녕하세요 수업 잘 듣고 있습니다. 선생님 강의영상에서는 sealed class 가 자동완성이 되는데, 저는 안됩니다. 어떻게 설정할 수 있나요?