[Flutter] - 교회 앱 - 02 폴더구조


1. 폴더구조


https://s3-us-west-2.amazonaws.com/secure.notion-static.com/7c27ef4d-ad0e-4047-afca-89e549119644/_2021-07-03__2.56.19.png

현재 나는 위와 같은 폴더구조를 생성하였다.

  1. core ⇒ 모두에게 공통되는 핵심 파일들을 모아놓았다.
    1. constants : 대표적으로 사용되는 상수들이 모여있다.
    2. error : error 처리를 위한 클래스들이 모여있다.
    3. network : 인터넷 연결 상태 확인을 위한 파일이 모여있다.
    4. state : 화면의 상태를 처리 하기 위한 파일이 있다.
    5. util : 시간 처리등 유틸 파일
  2. data : ⇒ 데이터 관련 처리
    1. model : 데이터 model들이 모여있다.
  3. pages ⇒ 화면 파일들
    1. common : 공통 위젯 파일
    2. common_mixin : 공통 mixin 파일
    3. bindinds : getx를 위한 binding파일들
    4. page별 폴더들 : 내부에는 components로 위젯들 파일 폴더가 있다.
  4. repositories ⇒ 서버와 통신하는 폴더이다.
  5. viewmodels ⇒ getX의 Controller들이 모여있다.

나중에 추가되면 업데이트 해보겠다.

현재 흐름은 pages ←Rx→ ViewModel ←→ Repository ←→Firebase 이다.

2. getX 간단한 사용


나는 getX에서 Router와 상태관리를 사용하려고한다.

  1. Router

    return GetMaterialApp(
          title: '두드리시오',
          theme: ThemeData(
            primarySwatch: Colors.blue,
            visualDensity: VisualDensity.adaptivePlatformDensity,
          ),
          initialRoute: '/',
          getPages: [
            GetPage(
                name: '/', page: () => NoticeScreen(), binding: NoticeBindings())
          ],
        );
    

    위와 같이 간단하게 설정이 가능하며 binding으로 GetController등을 주입해줄 수 있다. (의존성 주입)

  2. 상태관리

    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))
    )