[Flutter] - 교회 앱 - 02 폴더구조
1. 폴더구조
현재 나는 위와 같은 폴더구조를 생성하였다.
- core ⇒ 모두에게 공통되는 핵심 파일들을 모아놓았다.
- constants : 대표적으로 사용되는 상수들이 모여있다.
- error : error 처리를 위한 클래스들이 모여있다.
- network : 인터넷 연결 상태 확인을 위한 파일이 모여있다.
- state : 화면의 상태를 처리 하기 위한 파일이 있다.
- util : 시간 처리등 유틸 파일
- data : ⇒ 데이터 관련 처리
- model : 데이터 model들이 모여있다.
- pages ⇒ 화면 파일들
- common : 공통 위젯 파일
- common_mixin : 공통 mixin 파일
- bindinds : getx를 위한 binding파일들
- page별 폴더들 : 내부에는 components로 위젯들 파일 폴더가 있다.
- repositories ⇒ 서버와 통신하는 폴더이다.
- viewmodels ⇒ getX의 Controller들이 모여있다.
나중에 추가되면 업데이트 해보겠다.
현재 흐름은 pages ←Rx→ ViewModel ←→ Repository ←→Firebase 이다.
2. getX 간단한 사용
나는 getX에서 Router와 상태관리를 사용하려고한다.
Router
return GetMaterialApp( title: '두드리시오', theme: ThemeData( primarySwatch: Colors.blue, visualDensity: VisualDensity.adaptivePlatformDensity, ), initialRoute: '/', getPages: [ GetPage( name: '/', page: () => NoticeScreen(), binding: NoticeBindings()) ], );
위와 같이 간단하게 설정이 가능하며 binding으로 GetController등을 주입해줄 수 있다. (의존성 주입)
상태관리
getX에서는 Rx변수를 제공해주며 변수가 변동되면 자동으로 화면이 rebuild된다. (obx를 까먹지는 말자)
//getController 부분 class NoticeViewModel extends GetxController { RxList<NoticeModel> notices = <NoticeModel>[].obs; void addNotice(NoticeModel notice){ notices.add(notice); } } //screen 부분 Container( child: Obx(()=> Text(noticeViewModel.notices[0].content)) )