λ§€μΌ μλ‘μ΄ λͺ μΈκ³Ό ν¨κ» μκ°μ μ±μ°λ λλ§μ μ§ν κ°€λ¬λ¦¬
Your daily gallery of wisdom, capturing inspiration one quote at a time
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.0lib/
βββ 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 # λ‘κΉ
μμ€ν
μ΄ νλ‘μ νΈλ Flutterμμ κΆμ₯νλ MVVM (Model-View-ViewModel) μν€ν μ² ν¨ν΄μ λ°λ¦ λλ€.
- View: Flutter μμ ―μΌλ‘ UIλ₯Ό νννλ©°, μ¬μ©μ μ λ ₯μ ViewModelμ μ λ¬
- ViewModel: λΉμ¦λμ€ λ‘μ§ μ²λ¦¬ λ° UI μν κ΄λ¦¬ (ChangeNotifier μ¬μ©)
- Model: λ°μ΄ν° ꡬ쑰 μ μ (Freezedλ₯Ό νμ©ν λΆλ³ κ°μ²΄)
- Repository: λ°μ΄ν° μμ€ μΆμν λ° λΉμ¦λμ€ λ‘μ§ κ΄λ¦¬
Provider ν¨ν€μ§λ₯Ό μ¬μ©νμ¬ μνλ₯Ό κ΄λ¦¬ν©λλ€. Providerλ Flutter νμμ 곡μμ μΌλ‘ κΆμ₯νλ μν κ΄λ¦¬ μ루μ μΌλ‘, InheritedWidgetμ κΈ°λ°μΌλ‘ νμ¬ μμ ― νΈλ¦¬λ₯Ό ν΅ν΄ μνλ₯Ό ν¨μ¨μ μΌλ‘ μ νν©λλ€.
GetItμ μ¬μ©νμ¬ μλΉμ€ λ‘μΌμ΄ν° ν¨ν΄μ ꡬννμ΅λλ€. μ΄λ₯Ό ν΅ν΄ μμ‘΄μ±μ μ€μμμ κ΄λ¦¬νκ³ , ν μ€νΈ κ°λ₯ν μ½λλ₯Ό μμ±ν μ μμ΅λλ€.
μλ¬ μ²λ¦¬λ₯Ό μν΄ Result ν¨ν΄μ ꡬννμ΅λλ€. μ΄λ Rustμ Result νμ
μμ μκ°μ λ°μ μ±κ³΅(Success)κ³Ό μ€ν¨(Error) μνλ₯Ό λͺ
μμ μΌλ‘ μ²λ¦¬ν μ μκ² ν©λλ€.
- API μ°λ: ZenQuotes APIλ₯Ό ν΅ν μμ΄ λͺ μΈ μ 곡
- λ‘컬 μ μ₯: SQLiteλ₯Ό νμ©ν λͺ μΈ μΊμ±
- νκ΅μ΄ μ§μ: Assetsμμ λ‘λνλ νκ΅μ΄ λͺ μΈ
- μμ μ ν: 16κ°μ§ 미리 μ μλ μμ νλ νΈ
- ν μ€νΈ μμ: ν°μ/κ²μ μ ν μ€νΈ μ ν
- μ€μκ° λ―Έλ¦¬λ³΄κΈ°: μ νν μ€νμΌμ μ€μκ° μ μ©
- RepaintBoundary: μμ ―μ μ΄λ―Έμ§λ‘ μΊ‘μ²
- Permission Handling: κ°€λ¬λ¦¬ μ μ₯μ μν κΆν κ΄λ¦¬
- Share Plus: λ€μν νλ«νΌμΌλ‘ μ΄λ―Έμ§ 곡μ
- ZenQuotes API - μμ΄ λͺ μΈ μ 곡

