Skip to content

devcspark/todaymemo

Repository files navigation

todaymemo

컨두잇 코딩 테스트과제 입니다.

개발 스펙

  • 버전: Flutter 3.35.6, Dart 3.9.2
  • 상태관리: riverpod
  • 로컬 데이타베이스: sqflite
    • 이용사유:
      1. isar - 속도 강점. sqflite - 복잡한 구조처리 강점
      2. 간단한 사용에선 isar가 좀 더 유리하다고 판단.
      3. 사실 익숙한 sqflite 보다는 조금 덜 익숙하지만 사용해보고 싶어서 isar 선택하려고 했으나, riverpod의 버전과 충돌이 발생되어 sqflite를 사용하였습니다.
    Because riverpod_generator >=2.6.4 <3.0.0-dev.2 depends on source_gen ^2.0.0 and riverpod_generator >=2.6.1 <2.6.4 depends on analyzer ^6.7.0, riverpod_generator >=2.6.1 <3.0.0-dev.2 requires source_gen ^2.0.0 or analyzer ^6.7.0.
And because isar_generator >=3.0.1 depends on analyzer >=4.6.0 <6.0.0 and isar_generator >=3.0.0-dev.0 depends on source_gen ^1.2.2, isar_generator >=3.0.1 is incompatible with riverpod_generator >=2.6.1 <3.0.0-dev.2.
So, because todaymemo depends on both riverpod_generator ^2.6.2 and isar_generator ^3.1.0+1, version solving failed.

기능 정의

  1. 메모 리스트
  2. 메모 작성, 수정, 삭제
  3. 메모 검색

디렉토리 구조설계

최대한 클린 아키텍처에 맞게 구조를 잡았는데, 기준을 Feature로 잡아야 하나 고민했으나, 현재로선 기능이 하나이다보니 data, domain, presentation을 밖으로 뺐습니다.

todayMemo/lib
├── core
│   ├── error
│   ├── usecases
│   └── utils
├── data
│   ├── datasources
│   ├── models
│   └── repositories
├── domain
│   ├── entities
│   ├── repositories
│   └── usecases
├── presentation
│   ├── providers
│   ├── screens
│   └── widgets
├── index.dart
└── main.dart

상세기능 정의

  • 메모 리스트 화면
    1. 메모 목록 표시(제목, 태그, 마감일, 진행률)
    2. 검색버튼 - 클릭 시 검색창 노출되어 입력하면 제목, 내용에서 검색
    3. 필터버튼 - 클릭 시 태그 필터창 노출
    4. 정렬기능 - 기본, 마감일, 진행률 중 선택할 수 있는 버튼
    5. 메모작성버튼 - 클릭 시 메모작성 화면으로 이동
    6. 메모 선택 시 메모 상세화면으로 이동
  • 메모 상세화면
    1. 제목 입력
    2. 내용 입력
    3. 태그 입력
    4. 마감일
    5. 진향률 - 숫자 및 슬라이더
    6. 수정버튼 - 터치 시 수정화면으로
    7. 삭제버튼 - 터치 시 삭제 후 리스트화면으로
  • 메모 작성(수정)화면
    1. 제목 입력
    2. 내용입력
    3. 태그 입력
    4. 마감일 지정
    5. 진행완료 지정
  • 기타
    1. 다크테마 지원

태그관리

태그의 경우는 자유입력형태로 입력하도록 했습니다.

로컬디비 메모테이블 설계

CREATE TABLE memos (
  id INTEGER PRIMARY KEY,
  title TEXT NOT NULL,
  content TEXT NOT NULL,
  tags TEXT,
  completed INTEGER NOT NULL DEFAULT 0,
  due_date TEXT
)

실행방법

  1. 코드를 git에서 clone 후
  2. flutter 패키지 가져오기
flutter pub get
  1. 빌드 실행
dart run build_runner build --delete-conflicting-outputs
  1. 실행
flutter run
  1. Android Studio의 애뮬레이터를 실행하거나, adb를 통해 기기가 연결되어있어야 실행할 수 있습니다.

About

메모앱 코딩테스트 과제

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published