Skip to content

okstring/quote_canvas

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

163 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Quote Canvas πŸ“–βœ¨

맀일 μƒˆλ‘œμš΄ λͺ…μ–Έκ³Ό ν•¨κ»˜ μ˜κ°μ„ μ±„μš°λŠ” λ‚˜λ§Œμ˜ μ§€ν˜œ 가러리

Your daily gallery of wisdom, capturing inspiration one quote at a time

FlutterDartSQLite

πŸ“± ν”„λ‘œμ νŠΈ μ†Œκ°œ

Quote CanvasλŠ” μ„ νƒν•œ μƒ‰μ˜ λ°°κ²½κ³Ό ν•¨κ»˜ 의미 μžˆλŠ” λͺ…언을 μ œκ³΅ν•˜λŠ” 일일 영감 λͺ¨λ°”일 Appμž…λ‹ˆλ‹€. μ‚¬μš©μžλŠ” λ‹€μ–‘ν•œ λͺ…언을 κ°μƒν•˜κ³  μ»€μŠ€ν„°λ§ˆμ΄μ§•λœ λͺ…μ–Έ μΉ΄λ“œλ₯Ό μ΄λ―Έμ§€λ‘œ μ €μž₯ν•˜κ³  κ³΅μœ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

✨ μ£Όμš” κΈ°λŠ₯

  • πŸ“‹ 일일 λͺ…μ–Έ: 맀일 μƒˆλ‘œμš΄ μ˜κ°μ„ μ£ΌλŠ” λͺ…μ–Έ 제곡
  • 🎨 μ»€μŠ€ν„°λ§ˆμ΄μ§•: 배경색과 κΈ€μžμƒ‰μ„ 자유둭게 λ³€κ²½
  • ⭐ 즐겨찾기: λ§ˆμŒμ— λ“œλŠ” λͺ…언을 μ €μž₯ν•˜κ³  관리
  • πŸ“€ 곡유 κΈ°λŠ₯: λͺ…μ–Έ μΉ΄λ“œλ₯Ό μ΄λ―Έμ§€λ‘œ μ €μž₯ν•˜κ±°λ‚˜ SNS 곡유
  • πŸŒ™ 닀크 λͺ¨λ“œ: 라이트/닀크/μ‹œμŠ€ν…œ ν…Œλ§ˆ 지원
  • πŸ—„οΈ 데이터 관리: 둜컬 데이터 μ €μž₯ 및 관리

πŸ—“οΈ 개발 κΈ°κ°„

2025.04 ~ 진행쀑

πŸ› οΈ 기술 μŠ€νƒ

πŸ—οΈ μ•„ν‚€ν…μ²˜ νŒ¨ν„΄

  • MVVM (Model-View-ViewModel): λΉ„μ¦ˆλ‹ˆμŠ€ 둜직과 UI 뢄리
  • Provider: Flutter ꢌμž₯ μƒνƒœ 관리 μ†”λ£¨μ…˜
  • Repository Pattern: 데이터 μ†ŒμŠ€ 좔상화
  • Dependency Injection: GetIt을 ν™œμš©ν•œ μ˜μ‘΄μ„± μ£Όμž…

πŸ“Š 데이터 관리

  • SQLite (sqflite): 둜컬 λ°μ΄ν„°λ² μ΄μŠ€
  • SharedPreferences: μ‚¬μš©μž μ„€μ • μ €μž₯
  • HTTP: REST API 톡신

πŸ”§ μ£Όμš” νŒ¨ν‚€μ§€

dependencies:
  # μƒνƒœ 관리
  provider: ^6.1.4
  
  # λ„€νŠΈμ›Œν‚Ή
  http: ^1.1.0
  
  # 둜컬 μ €μž₯μ†Œ
  sqflite: ^2.4.2
  shared_preferences: ^2.2.0
  
  # λ„€λΉ„κ²Œμ΄μ…˜
  go_router: ^15.0.0
  
  # μ˜μ‘΄μ„± μ£Όμž…
  get_it: ^8.0.3
  
  # 데이터 λͺ¨λΈλ§
  freezed: ^3.0.6
  json_annotation: ^4.9.0
  
  # 파일 처리
  path_provider: ^2.1.5
  permission_handler: ^11.4.0
  
  # 곡유 κΈ°λŠ₯
  share_plus: ^10.1.4
  flutter_image_gallery_saver: ^0.0.2
  
  # μœ ν‹Έλ¦¬ν‹°
  uuid: ^4.5.1
  url_launcher: ^6.3.1
  package_info_plus: ^8.3.0

πŸ“ ν”„λ‘œμ νŠΈ ꡬ쑰

lib/
β”œβ”€β”€ core/                          # 핡심 κΈ°λŠ₯
β”‚   β”œβ”€β”€ di/                       # μ˜μ‘΄μ„± μ£Όμž…
β”‚   β”œβ”€β”€ exceptions/               # μ˜ˆμ™Έ 처리
β”‚   β”œβ”€β”€ presentation/             # 곡톡 ν”„λ ˆμ  ν…Œμ΄μ…˜ 둜직
β”‚   β”œβ”€β”€ result.dart              # Result νŒ¨ν„΄
β”‚   └── routing/                 # λΌμš°νŒ… μ„€μ •
β”œβ”€β”€ data/                         # 데이터 λ ˆμ΄μ–΄
β”‚   β”œβ”€β”€ data_source/             # 데이터 μ†ŒμŠ€ (API, DB, File)
β”‚   β”œβ”€β”€ dto/                     # 데이터 전솑 객체
β”‚   β”œβ”€β”€ dto_mapper/              # DTO λ§€ν•‘
β”‚   β”œβ”€β”€ model/                   # 도메인 λͺ¨λΈ
β”‚   β”œβ”€β”€ model_mapper/            # λͺ¨λΈ λ§€ν•‘
β”‚   └── repository/              # 리포지토리 κ΅¬ν˜„
β”œβ”€β”€ presentation/                 # ν”„λ ˆμ  ν…Œμ΄μ…˜ λ ˆμ΄μ–΄
β”‚   β”œβ”€β”€ components/              # μž¬μ‚¬μš© κ°€λŠ₯ν•œ UI μ»΄ν¬λ„ŒνŠΈ
β”‚   β”œβ”€β”€ home/                    # ν™ˆ ν™”λ©΄
β”‚   β”œβ”€β”€ settings/                # μ„€μ • ν™”λ©΄
β”‚   └── splash/                  # μŠ€ν”Œλž˜μ‹œ ν™”λ©΄
β”œβ”€β”€ ui/                          # UI κ΄€λ ¨
β”‚   β”œβ”€β”€ app_colors.dart          # 색상 μ •μ˜
β”‚   β”œβ”€β”€ app_text_styles.dart     # ν…μŠ€νŠΈ μŠ€νƒ€μΌ
β”‚   └── app_theme.dart           # μ•± ν…Œλ§ˆ
└── utils/                       # μœ ν‹Έλ¦¬ν‹°
    β”œβ”€β”€ extensions/              # ν™•μž₯ λ©”μ„œλ“œ
    └── logger.dart              # λ‘œκΉ… μ‹œμŠ€ν…œ

πŸ›οΈ μ•„ν‚€ν…μ²˜ μ„€λͺ…

MVVM νŒ¨ν„΄

이 ν”„λ‘œμ νŠΈλŠ” Flutterμ—μ„œ ꢌμž₯ν•˜λŠ” MVVM (Model-View-ViewModel) μ•„ν‚€ν…μ²˜ νŒ¨ν„΄μ„ λ”°λ¦…λ‹ˆλ‹€.

  • View: Flutter μœ„μ ―μœΌλ‘œ UIλ₯Ό ν‘œν˜„ν•˜λ©°, μ‚¬μš©μž μž…λ ₯을 ViewModel에 전달
  • ViewModel: λΉ„μ¦ˆλ‹ˆμŠ€ 둜직 처리 및 UI μƒνƒœ 관리 (ChangeNotifier μ‚¬μš©)
  • Model: 데이터 ꡬ쑰 μ •μ˜ (Freezedλ₯Ό ν™œμš©ν•œ λΆˆλ³€ 객체)
  • Repository: 데이터 μ†ŒμŠ€ 좔상화 및 λΉ„μ¦ˆλ‹ˆμŠ€ 둜직 관리

μƒνƒœ 관리

Provider νŒ¨ν‚€μ§€λ₯Ό μ‚¬μš©ν•˜μ—¬ μƒνƒœλ₯Ό κ΄€λ¦¬ν•©λ‹ˆλ‹€. ProviderλŠ” Flutter νŒ€μ—μ„œ κ³΅μ‹μ μœΌλ‘œ ꢌμž₯ν•˜λŠ” μƒνƒœ 관리 μ†”λ£¨μ…˜μœΌλ‘œ, InheritedWidget을 기반으둜 ν•˜μ—¬ μœ„μ ― 트리λ₯Ό 톡해 μƒνƒœλ₯Ό 효율적으둜 μ „νŒŒν•©λ‹ˆλ‹€.

μ˜μ‘΄μ„± μ£Όμž…

GetIt을 μ‚¬μš©ν•˜μ—¬ μ„œλΉ„μŠ€ λ‘œμΌ€μ΄ν„° νŒ¨ν„΄μ„ κ΅¬ν˜„ν–ˆμŠ΅λ‹ˆλ‹€. 이λ₯Ό 톡해 μ˜μ‘΄μ„±μ„ μ€‘μ•™μ—μ„œ κ΄€λ¦¬ν•˜κ³ , ν…ŒμŠ€νŠΈ κ°€λŠ₯ν•œ μ½”λ“œλ₯Ό μž‘μ„±ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

Result νŒ¨ν„΄

μ—λŸ¬ 처리λ₯Ό μœ„ν•΄ Result νŒ¨ν„΄μ„ κ΅¬ν˜„ν–ˆμŠ΅λ‹ˆλ‹€. μ΄λŠ” Rust의 Result νƒ€μž…μ—μ„œ μ˜κ°μ„ λ°›μ•„ 성곡(Success)κ³Ό μ‹€νŒ¨(Error) μƒνƒœλ₯Ό λͺ…μ‹œμ μœΌλ‘œ μ²˜λ¦¬ν•  수 있게 ν•©λ‹ˆλ‹€.

πŸ”§ μ£Όμš” κΈ°λŠ₯ μ„€λͺ…

1. λͺ…μ–Έ 관리 μ‹œμŠ€ν…œ

  • API 연동: ZenQuotes APIλ₯Ό ν†΅ν•œ μ˜μ–΄ λͺ…μ–Έ 제곡
  • 둜컬 μ €μž₯: SQLiteλ₯Ό ν™œμš©ν•œ λͺ…μ–Έ 캐싱
  • ν•œκ΅­μ–΄ 지원: Assetsμ—μ„œ λ‘œλ“œν•˜λŠ” ν•œκ΅­μ–΄ λͺ…μ–Έ

2. μ»€μŠ€ν„°λ§ˆμ΄μ§• κΈ°λŠ₯

  • 색상 선택: 16κ°€μ§€ 미리 μ •μ˜λœ 색상 νŒ”λ ˆνŠΈ
  • ν…μŠ€νŠΈ 색상: 흰색/검정색 ν…μŠ€νŠΈ 선택
  • μ‹€μ‹œκ°„ 미리보기: μ„ νƒν•œ μŠ€νƒ€μΌμ˜ μ‹€μ‹œκ°„ 적용

3. 이미지 처리

  • RepaintBoundary: μœ„μ ―μ„ μ΄λ―Έμ§€λ‘œ 캑처
  • Permission Handling: 가러리 μ €μž₯을 μœ„ν•œ κΆŒν•œ 관리
  • Share Plus: λ‹€μ–‘ν•œ ν”Œλž«νΌμœΌλ‘œ 이미지 곡유

πŸ™ 제곡

About

Your daily gallery of wisdom, capturing inspiration one quote at a time.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages