MVVM아키텍처를 적용하게 되면 아래와 같은 폴더구조가 된다 아래 폴더 구조를 기본으로 추가적인 화면이나 도메인이 추가될때 마다 확장해나가면 될것이다. /data /model - post.dart /repository - post_repository.dart /datasource - local_datasource.dart - remote_datasource.dart /ui /post - post_list_view.dart - post_list_viewmodel.dart - post_detail_view.dart - post_detail_viewmodel.dart - post_pages.dart /ui View와 ViewModel에 해당하는 파일들이 있으며, 하나의 주제 혹은 도메인 단위로 폴더를 생성한다..
Data Layer App전체에 필요한 데이터를 제공하는 곳으로, Repository 패턴으로 구성되어 있다. 보통 ViewModel이 Repository에 필요한 정보를 요청하게 되고, RemoteDataSource, LocalDataSource를 통해 외부혹은 내부스토리지의 데이터를 가져오거나 갱신한다. Repository 데이터 저장소라는 의미의 Repository는 실제 ViewModel에서 Data Layer에 접근하는 객체이다. 보통은 특정 도메인 별로 Repository를 만들게 되는데 예를 들면 UserRepository, PostRepository와 같은 형태로 구분해서 만든다. 위 에서 확인 할 수 있듯이 ViewModel은 여러 Repository를 참조할 수 있으며, 각 Reposi..
View View는 유저에게 UI를 보여주는 곳으로, View 클래스 하나로 이루어져 있다. Flutter에서는 선언형 UI를 사용한다. 그래서 모든 View의 구성요소들은 Widget이 되고, 이것들의 위젯트리를 만들어 화면을 표시하게 된다. 기반이 되는 대표 Widget으로 StatefulWidget과 StatelessWidget이 있다. StatefulWidget은 자체적으로 state를 유지하고 관리하기 때문에 커스텀 위젯을 만드는데 주로 사용하는 편이다. 우리처럼 ViewModel에서 state를 관리할 경우에는 StatelessWidget으로 View를 만드는 것이 개념적으로 바람직 하다. PostListView (post/post_list_view.dart) 게시물 목록을 표시하는 View ..
모바일 앱 개발을 하게 되면 기본적으로 필요한 구조와 기능이 있다. Android, iOS앱 할것 없이 결국 앱이 구현해야 하는 최종 기능은 같다. Flutter로 앱을 만들때도 마찬가지다. 앱을 개발한다면 앱의 확장성과 유지보수의 편의성을 고려해서 꼭 아키텍처를 적용하는 것이 필요하다. 개인적으로 모바일 앱에 가장 적합한 아키텍처는 MVVM이라고 생각한다. Flutter로 앱을 개발할때 Andorid 앱 개발에 사용하던 MVVM 아키텍처를 어떻게 하면 Flutter 특성에 맞게 잘 적용 시킬 수 있을지 많은 고민을 했었다. Android개발자중 MVVM이 AAC (Android Architecture Component)로만 사용할수 있는 기능처럼 생각하는 사람들도 있는데 MVVM은 AAC가 없이도 개발..
질문 Flutter에서 화면간 정보전달은 어떻게 해야 하나요? 예를 들어 현재 화면이 목록화면이고 여기서 게시물 등록 화면으로 이동한 후 정상적으로 게시물이 추가된 경우에는 목록을 갱신하고, 그냥 백 버튼을 누르거나 취소를 한 경우에는 이전 목록화면을 그대로 유지하고 싶습니다. 어떻게 해야 할까요? 답변 Navigator에 새로운 화면을 표시하기 위해서 MeterialPageRoute와 같은 Route에 Widget을 설정한 후 navigator에 push합니다. (또는 /post/add와같이 이름을 지정해서 이동할수 있습니다) 이럴경우 navigator의 이전에 남아 있던 page는 statck에 그대로 남아 있게 되는데, 현재 page를 navigator에서 pop을 하고 나면 statck에 있던..
flutter에서 앱을 시작전 초기화 과정중에 발생할 수 있는 이슈와 처리 방법에 대해서 다루고자 한다. 처음 플러터 앱을 만들면 기본 샘플앱에서 부터 시작 하는 경우가 많은데 실제 프로젝트에서 사용하기에는 조금 부족한 점이 있다. 우선 앱 시작 시점에 각종 리소스등와 firebase의 초기화가 필요하다. 그외 앱의 특성에 따라 splash화면 보다 먼저 내부적으로 초기화 해야 하는 것들이 있을수 있다. 예를 들면 필자가 사용중인 intl 라이브러인 intl_utils의 경우 다국어를 처리하는 용도로 사용중인데 화면에 어떤 종류의 메시지라도 표시 하기 위해서는 필수적으로 init가 되어야 한다. await Messages.delegate.load(locale) 그런데 flutter의 main() 함수내에..
flutter 2.0이 발표된지 일주일이 조금 지났습니다. 발표당일날까지만 해도 아직 null-safety를 지원하지 않던 라이브러리들이 이제는 많이 null-safety를 지원하기 시작했고, 저도 개발중이던 프로젝트를 2.0으로 upgrade해보기로 했습니다. 우선 새로운 업그레이드를 위해서 최신 버전의 flutter SDK를 다운로드 받아야 합니다. 혹시 기존에 기존에 다른 프로젝트를 1.x로 유지 해야 한다면, 기존 flutter SDK를 바로 업데이트 하기 보다는 2.0 SDK를 다운받은 후 필요한 프로젝트에만 target flutter path를 변경해서 사용하는게 좋겠습니다. 2.0 SDK를 다운받았다면 적절한 폴더에 압축을 푼 후 변경하고자 하는 버전의 flutter path를 변경합니다. ..
2021년 3월 4일 flutter 2.0.0과 dart 2.12.0 가 정식으로 release 되었습니다. 이번 업데이트는 중요 메이저 버전 업데이트로 큰 변화가 있었는데 그중 가장 큰 것이 null safety와 web에 대한 stable 버전 지원입니다. 아무래도 기존 flutter 개발자에게 가장 큰 변화는 역시 null safety 적용이 될 것으로 보입니다. 이것이 왜 가장 큰 변화냐 하면 우리가 만든 코드를 모두 null safety하게 마이그레이션 해야 하기 때문인데요 flutter 2.0부터는 기본 변수의 선언이 non-nullable 이기 때문에 기존의 nullable 인 것과는 정반대이며, null 사용가능 여부를 모두 명시해야 하기 때문입니다. 변수에 null사용 여부를 표시하는건 ..
- Total
- Today
- Yesterday
- RenderObject
- Mutiple Flutter
- Flutter
- Flutter LifeCycle
- flutter element
- json_serializable
- Flutter TDD
- Element LifeCycle
- Flutter3.0
- freezed
- flutter_secure_storage
- flutter 다국어처리
- DART
- enum member
- flutter mvvm
- widget element
- Route
- Widget Tree
- dart 2.17
- FlutterEngine
- dart enum
- flutter l10n
- StatefulWidget LifeCycle
- flutter i18n
- navigator
- MVVM
- LocalKey
- flutter2.0
- python3
- Android
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |