flutter-init

Use when user wants to create a new Flutter project (Todo/Habit/Note/Expense/Custom domain) with Clean Architecture, Riverpod 3.0, Drift, and modern Flutter stack

$ Instalar

git clone https://github.com/bear2u/my-skills /tmp/my-skills && cp -r /tmp/my-skills/skills/flutter-init ~/.claude/skills/my-skills

// tip: Run this command in your terminal to install the skill


name: flutter-init description: Use when user wants to create a new Flutter project (Todo/Habit/Note/Expense/Custom domain) with Clean Architecture, Riverpod 3.0, Drift, and modern Flutter stack

Flutter Init Skill

๋„๋ฉ”์ธ ๊ธฐ๋ฐ˜ Flutter ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ํ˜„๋Œ€์ ์ธ ์•„ํ‚คํ…์ฒ˜๋กœ ์ž๋™ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. Todo, Habit, Note, Expense ๋˜๋Š” Custom ๋„๋ฉ”์ธ์„ ์„ ํƒํ•˜์—ฌ Clean Architecture ๊ธฐ๋ฐ˜์˜ ์™„์ „ํ•œ CRUD ์•ฑ์„ ์ฆ‰์‹œ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Quick Start

์Šคํ‚ฌ ์‹คํ–‰ ์‹œ ๋‹ค์Œ ์ •๋ณด๋ฅผ ์ž…๋ ฅ๋ฐ›์Šต๋‹ˆ๋‹ค:

  • ํด๋”๋ช… (์˜ˆ: my_habit_app)
  • ํ”„๋กœ์ ํŠธ๋ช…/ํŒจํ‚ค์ง€๋ช… (์˜ˆ: habit_app)
  • ๋„๋ฉ”์ธ ์„ ํƒ (Todo/Habit/Note/Expense/Custom)
  • ์Šคํƒ ํ”„๋ฆฌ์…‹ (Minimal/Essential/Full Stack/Custom)

๊ทธ ํ›„ ์ž๋™์œผ๋กœ ๋‹ค์Œ ๋‹จ๊ณ„๊ฐ€ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค:

# 1. ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ (Android/Kotlin, iOS/Swift)
flutter create --platforms android,ios --android-language kotlin --org com.example [ํด๋”๋ช…]

# 2. ํŒจํ‚ค์ง€ ์„ค์น˜
flutter pub get

# 3. ๋„๋ฉ”์ธ๋ณ„ Clean Architecture ์ฝ”๋“œ ์ž๋™ ์ƒ์„ฑ
# - domain/entities/[domain].dart (Freezed ์—”ํ‹ฐํ‹ฐ)
# - data/datasources/local/app_database.dart (Drift ํ…Œ์ด๋ธ”)
# - data/repositories/[domain]_repository_impl.dart (Repository ๊ตฌํ˜„)
# - presentation/providers/[domain]_providers.dart (Riverpod 3.0)
# - presentation/screens/* (List/Detail/Form ํ™”๋ฉด)

# 4. ์ฝ”๋“œ ์ƒ์„ฑ (Freezed, Drift, JSON Serializable)
dart run build_runner build --delete-conflicting-outputs

# 5. ์ฝ”๋“œ ๊ฒ€์ฆ ๋ฐ ์˜ค๋ฅ˜ ์ž๋™ ์ˆ˜์ • (ํ•„์ˆ˜)
flutter analyze

# 6. ์•ฑ ์‹คํ–‰
flutter run

Task Instructions

IMPORTANT: ์ด ์Šคํ‚ฌ์€ ๋Œ€ํ™”ํ˜•์œผ๋กœ ์ง„ํ–‰๋ฉ๋‹ˆ๋‹ค.

Step 1: ๋„๋ฉ”์ธ ๋ฐ ํ”„๋กœ์ ํŠธ ์„ค์ • ์งˆ๋ฌธ

๋จผ์ € ์‚ฌ์šฉ์ž์—๊ฒŒ ์ด๋ ‡๊ฒŒ ๋ฌผ์–ด๋ณด์„ธ์š”:

"Flutter ์•ฑ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ ์ •๋ณด๋ฅผ ์•Œ๋ ค์ฃผ์„ธ์š”:

1. ๋„๋ฉ”์ธ(์—”ํ‹ฐํ‹ฐ) ์„ ํƒ

์–ด๋–ค ๋„๋ฉ”์ธ์˜ ์•ฑ์„ ๋งŒ๋“œ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

A) Todo (ํ•  ์ผ ๊ด€๋ฆฌ)

  • ํ•„๋“œ: title, description, isCompleted, createdAt, completedAt
  • ๊ธฐ๋Šฅ: CRUD, ํ•„ํ„ฐ๋ง(์ „์ฒด/์ง„ํ–‰์ค‘/์™„๋ฃŒ), ์ฒดํฌ๋ฐ•์Šค ํ† ๊ธ€

B) Habit (์Šต๊ด€ ํŠธ๋ž˜์ปค)

  • ํ•„๋“œ: name, description, frequency(daily/weekly/monthly), streak, lastCompletedAt, goal, isActive
  • ๊ธฐ๋Šฅ: CRUD, ์—ฐ์† ๊ธฐ๋ก ์ถ”์ , ๋ชฉํ‘œ ๋‹ฌ์„ฑ๋ฅ , ์™„๋ฃŒ ์ฒดํฌ

C) Note (๋ฉ”๋ชจ)

  • ํ•„๋“œ: title, content, tags, isPinned, createdAt, updatedAt
  • ๊ธฐ๋Šฅ: CRUD, ํƒœ๊ทธ ํ•„ํ„ฐ๋ง, ๊ณ ์ • ๋ฉ”๋ชจ, ๊ฒ€์ƒ‰

D) Expense (์ง€์ถœ ๊ด€๋ฆฌ)

  • ํ•„๋“œ: amount, category, description, date, paymentMethod
  • ๊ธฐ๋Šฅ: CRUD, ์นดํ…Œ๊ณ ๋ฆฌ๋ณ„ ์ง‘๊ณ„, ์›”๋ณ„ ํ†ต๊ณ„, ํ•„ํ„ฐ๋ง

E) Custom (์ง์ ‘ ์ •์˜)

  • ์—”ํ‹ฐํ‹ฐ๋ช…๊ณผ ํ•„๋“œ๋ฅผ ์ง์ ‘ ์ž…๋ ฅ

2. ํ”„๋กœ์ ํŠธ ์ •๋ณด

  • ํด๋”๋ช…: ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•  ํด๋” ์ด๋ฆ„ (๊ธฐ๋ณธ๊ฐ’: [๋„๋ฉ”์ธ]_app, ์˜ˆ: habit_app)
    • ์ด ํด๋”์— Flutter ํ”„๋กœ์ ํŠธ๊ฐ€ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค
  • ํ”„๋กœ์ ํŠธ๋ช… (ํŒจํ‚ค์ง€๋ช…): Flutter ํŒจํ‚ค์ง€ ์ด๋ฆ„ (๊ธฐ๋ณธ๊ฐ’: ํด๋”๋ช…๊ณผ ๋™์ผ)
    • pubspec.yaml์˜ name ํ•„๋“œ์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค
    • import ๋ฌธ์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค (์˜ˆ: package:habit_app/...)
  • ์กฐ์ง๋ช…: (๊ธฐ๋ณธ๊ฐ’: com.example)
    • Android/iOS ํŒจํ‚ค์ง€ ์‹๋ณ„์ž์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค (์˜ˆ: com.example.habit_app)

3. ์Šคํƒ ํ”„๋ฆฌ์…‹ ์„ ํƒ

๋‹ค์Œ ์ค‘ ํ•˜๋‚˜๋ฅผ ์„ ํƒํ•ด์ฃผ์„ธ์š”:

A) Essential (๊ถŒ์žฅ)

  • โœ… GoRouter (ํƒ€์ž… ์•ˆ์ „ํ•œ ๋ผ์šฐํŒ…)
  • โœ… SharedPreferences (๋กœ์ปฌ ์„ค์ • ์ €์žฅ)
  • โœ… FPDart (ํ•จ์ˆ˜ํ˜• ์—๋Ÿฌ ํ•ธ๋“ค๋ง)
  • โœ… Google Fonts
  • โœ… FluentUI Icons
  • โŒ Auth ์‹œ์Šคํ…œ ์ œ์™ธ
  • โŒ Responsive Utils ์ œ์™ธ

B) Minimal (๊ฐ€์žฅ ๋‹จ์ˆœ)

  • โŒ GoRouter (๊ธฐ๋ณธ Navigator ์‚ฌ์šฉ)
  • โœ… SharedPreferences
  • โŒ FPDart ์ œ์™ธ
  • โŒ Google Fonts ์ œ์™ธ
  • โœ… ๊ธฐ๋ณธ FluentUI Icons
  • โŒ Auth ์‹œ์Šคํ…œ ์ œ์™ธ
  • โŒ Responsive Utils ์ œ์™ธ

C) Full Stack (๋ชจ๋“  ๊ธฐ๋Šฅ)

  • โœ… GoRouter
  • โœ… SharedPreferences
  • โœ… FPDart (ํ•จ์ˆ˜ํ˜• ์—๋Ÿฌ ํ•ธ๋“ค๋ง)
  • โœ… Google Fonts
  • โœ… Responsive Utils
  • โœ… FluentUI Icons
  • โœ… Auth ์‹œ์Šคํ…œ (Login/Register) - ์„ ํƒ ๋„๋ฉ”์ธ์— ๋”ฐ๋ผ

D) Custom (์ง์ ‘ ์„ ํƒ)

  • ๊ฐ ๊ธฐ๋Šฅ์„ ๊ฐœ๋ณ„์ ์œผ๋กœ ์„ ํƒ

์–ด๋–ค ๋„๋ฉ”์ธ๊ณผ ํ”„๋ฆฌ์…‹์„ ์„ ํƒํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? (๋„๋ฉ”์ธ: A/B/C/D/E, ํ”„๋ฆฌ์…‹: A/B/C/D)"

Step 2: Custom ์„ ํƒ ์‹œ ์ถ”๊ฐ€ ์งˆ๋ฌธ

2-1. Custom ๋„๋ฉ”์ธ (E) ์„ ํƒ ์‹œ:

  1. ์—”ํ‹ฐํ‹ฐ๋ช…: ์—”ํ‹ฐํ‹ฐ ์ด๋ฆ„์„ ์ž…๋ ฅํ•˜์„ธ์š” (์˜ˆ: Task, Event, Book)
  2. ํ•„๋“œ ์ •์˜: ๊ฐ ํ•„๋“œ๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š” (ํ˜•์‹: ํ•„๋“œ๋ช…:ํƒ€์ž…, ์˜ˆ: title:String, amount:double, isActive:bool)
    • ์ง€์› ํƒ€์ž…: String, int, double, bool, DateTime
    • createdAt, updatedAt์€ ์ž๋™ ์ถ”๊ฐ€๋จ
  3. ์ฃผ์š” ๊ธฐ๋Šฅ: ํ•„ํ„ฐ๋ง/์ •๋ ฌ ๊ธฐ์ค€์ด ๋  ํ•„๋“œ๋ฅผ ์„ ํƒํ•˜์„ธ์š”

2-2. Custom ์Šคํƒ ํ”„๋ฆฌ์…‹ (D) ์„ ํƒ ์‹œ:

๋‹ค์Œ ์งˆ๋ฌธ๋“ค์„ ์ˆœ์ฐจ์ ์œผ๋กœ ํ•˜์„ธ์š”:

  1. ๋„ค๋น„๊ฒŒ์ด์…˜: GoRouter๋ฅผ ์‚ฌ์šฉํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? (์˜ˆ/์•„๋‹ˆ์˜ค)
  2. ์—๋Ÿฌ ํ•ธ๋“ค๋ง: FPDart๋ฅผ ์‚ฌ์šฉํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? (์˜ˆ/์•„๋‹ˆ์˜ค)
  3. UI: Google Fonts๋ฅผ ์‚ฌ์šฉํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? (์˜ˆ/์•„๋‹ˆ์˜ค)
  4. ๋ฐ˜์‘ํ˜•: Responsive Utils๋ฅผ ํฌํ•จํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? (์˜ˆ/์•„๋‹ˆ์˜ค)
  5. ์ธ์ฆ ์‹œ์Šคํ…œ: Auth ์‹œ์Šคํ…œ์„ ํฌํ•จํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? (์˜ˆ/์•„๋‹ˆ์˜ค)

Step 3: ์„ ํƒ๋œ ๋„๋ฉ”์ธ๊ณผ ์Šคํƒ์— ๋”ฐ๋ผ ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ

  1. Flutter ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ:

    • ์‚ฌ์šฉ์ž๊ฐ€ ์ง€์ •ํ•œ ํด๋”๋ช…์œผ๋กœ ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ
    • ๋ช…๋ น์–ด: flutter create --platforms android,ios --android-language kotlin --org [์กฐ์ง๋ช…] [ํด๋”๋ช…]
    • ์˜ˆ: flutter create --platforms android,ios --android-language kotlin --org com.example my_habit_app
    • ํด๋”๋ช…๊ณผ ํ”„๋กœ์ ํŠธ๋ช…(ํŒจํ‚ค์ง€๋ช…)์ด ๋‹ค๋ฅธ ๊ฒฝ์šฐ, ์ƒ์„ฑ ํ›„ pubspec.yaml์˜ name ํ•„๋“œ๋ฅผ ์ˆ˜์ •
  2. Kotlin DSL ํ™•์ธ (์ตœ์‹  Flutter๋Š” ์ž๋™์œผ๋กœ Kotlin DSL ์‚ฌ์šฉ)

  3. ์„ ํƒ๋œ ํŒจํ‚ค์ง€ ์„ค์น˜: pubspec.yaml ์—…๋ฐ์ดํŠธ ํ›„ flutter pub get

  4. ํด๋” ๊ตฌ์กฐ ์ƒ์„ฑ: Clean Architecture (core, data, domain, presentation)

  5. ๋„๋ฉ”์ธ๋ณ„ ๋ณด์ผ๋Ÿฌํ”Œ๋ ˆ์ดํŠธ ์ƒ์„ฑ:

    A) Todo: title, description, isCompleted, createdAt, completedAt

    • Repository: getTodos, createTodo, updateTodo, toggleCompletion, deleteTodo
    • Providers: filteredTodosProvider (all/pending/completed)
    • UI: TodoListScreen (ํ•„ํ„ฐ๋ง), TodoDetailScreen, TodoFormDialog

    B) Habit: name, description, frequency, streak, lastCompletedAt, goal, isActive

    • Repository: getHabits, createHabit, updateHabit, completeHabit, deleteHabit
    • Providers: filteredHabitsProvider (active/inactive), habitStatsProvider
    • UI: HabitListScreen (ํ†ต๊ณ„), HabitDetailScreen, HabitFormDialog

    C) Note: title, content, tags, isPinned, createdAt, updatedAt

    • Repository: getNotes, createNote, updateNote, togglePin, deleteNote
    • Providers: filteredNotesProvider (pinned/all/byTag), searchProvider
    • UI: NoteListScreen (๊ฒ€์ƒ‰/ํƒœ๊ทธ), NoteDetailScreen, NoteFormDialog

    D) Expense: amount, category, description, date, paymentMethod

    • Repository: getExpenses, createExpense, updateExpense, deleteExpense
    • Providers: expensesByCategory, monthlyStats, filteredExpenses
    • UI: ExpenseListScreen (ํ†ต๊ณ„), ExpenseDetailScreen, ExpenseFormDialog

    E) Custom: ์‚ฌ์šฉ์ž ์ •์˜ ํ•„๋“œ

    • Repository: ๊ธฐ๋ณธ CRUD ๋ฉ”์„œ๋“œ
    • Providers: ๊ธฐ๋ณธ list provider
    • UI: ๊ธฐ๋ณธ List/Detail/Form ํ™”๋ฉด
  6. ์„ค์ • ํŒŒ์ผ ์ƒ์„ฑ (๋ผ์šฐํŒ…, ์Šคํ† ๋ฆฌ์ง€, ๋‹ค๊ตญ์–ด ๋“ฑ)

  7. Android ์„ค์ • ์—…๋ฐ์ดํŠธ (CRITICAL for flutter_local_notifications):

    • android/app/build.gradle.kts์— core library desugaring ํ™œ์„ฑํ™”:
      android {
          compileOptions {
              sourceCompatibility = JavaVersion.VERSION_11
              targetCompatibility = JavaVersion.VERSION_11
              isCoreLibraryDesugaringEnabled = true  // ์ถ”๊ฐ€
          }
      }
      dependencies {
          coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:2.0.4")  // ์ถ”๊ฐ€
      }
      
  8. ์ฝ”๋“œ ์ƒ์„ฑ: dart run build_runner build --delete-conflicting-outputs

  9. ์ฝ”๋“œ ๊ฒ€์ฆ ๋ฐ ์˜ค๋ฅ˜ ์ˆ˜์ •:

    a. flutter analyze ์‹คํ–‰

    b. ๋ฐœ๊ฒฌ๋œ ์˜ค๋ฅ˜ ์ˆ˜์ •:

    • Freezed 3.0 ํ˜ธํ™˜์„ฑ (CRITICAL): ๋ชจ๋“  Freezed ์—”ํ‹ฐํ‹ฐ๋Š” sealed class ์‚ฌ์šฉ
      • โŒ class User with _$User
      • โœ… sealed class User with _$User
    • ํ…Œ๋งˆ ์„ค์ •: CardTheme โ†’ CardThemeData ์‚ฌ์šฉ (deprecated)
    • API Client Map ํƒ€์ž…: Map<String, dynamic> ๋ฐ˜ํ™˜ ์‹œ ์ƒ์„ฑ ์ฝ”๋“œ ๊ฒ€์ฆ
      • retrofit_generator๊ฐ€ ์ƒ์„ฑํ•œ dynamic.fromJson ์—๋Ÿฌ ๋ฐœ์ƒ ์‹œ ์ˆ˜์ • ํ•„์š”
    • import ๊ฒฝ๋กœ ์ˆ˜์ •: ๋ชจ๋“  ์ƒ๋Œ€ ๊ฒฝ๋กœ๋ฅผ package: ํ˜•์‹์œผ๋กœ ๋ณ€๊ฒฝ
      • ์˜ˆ: import '../../domain/entities/todo.dart'; โ†’ import 'package:todo_app/domain/entities/todo.dart';
    • ํŒจํ‚ค์ง€ ์˜์กด์„ฑ ํ™•์ธ: ๋ˆ„๋ฝ๋œ ํŒจํ‚ค์ง€ ์ถ”๊ฐ€ (์˜ˆ: shared_preferences)
    • Riverpod 3.0 ํ˜ธํ™˜์„ฑ: StateNotifier โ†’ Notifier, StateProvider โ†’ NotifierProvider
    • FluentUI ์•„์ด์ฝ˜ ์ด๋ฆ„ ํ™•์ธ: ์กด์žฌํ•˜์ง€ ์•Š๋Š” ์•„์ด์ฝ˜์€ ๋Œ€์ฒด
    • ํƒ€์ž… ์•ˆ์ „์„ฑ: switch expression ์‚ฌ์šฉ, null safety ์ค€์ˆ˜

    c. ์žฌ๊ฒ€์ฆ: ๋ชจ๋“  error ๋ ˆ๋ฒจ ์˜ค๋ฅ˜๊ฐ€ ์—†์„ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต

    d. ๋ชฉํ‘œ: flutter analyze ๊ฒฐ๊ณผ๊ฐ€ "0-1 issues found" (info ๋ ˆ๋ฒจ๋งŒ ํ—ˆ์šฉ)

    โœ… CRITICAL: ์ด ๋‹จ๊ณ„๋Š” ํ•„์ˆ˜์ž…๋‹ˆ๋‹ค. ๋ชจ๋“  error๋ฅผ ์ œ๊ฑฐํ•ด์•ผ ๋‹ค์Œ ๋‹จ๊ณ„๋กœ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Step 4: ์ตœ์ข… ๊ฒ€์ฆ ๋ฐ ์•ˆ๋‚ด

โœ… CRITICAL: ์ด ๋‹จ๊ณ„๋Š” ํ”„๋กœ์ ํŠธ ์™„๋ฃŒ์˜ ํ•„์ˆ˜ ์กฐ๊ฑด์ž…๋‹ˆ๋‹ค.

  1. ์ตœ์ข… ๋ถ„์„ ์‹คํ–‰:

    flutter analyze
    
  2. ์„ฑ๊ณต ๊ธฐ์ค€:

    • โœ… ์„ฑ๊ณต ์˜ˆ์‹œ:

      Analyzing todo_app...
      No issues found!
      

      ๋˜๋Š”

      Analyzing todo_app...
      1 issue found. (ran in 2.3s)
      info โ€ข Prefer using lowerCamelCase for constant names โ€ข lib/core/constants.dart:5:7 โ€ข constant_identifier_names
      
    • โŒ ์‹คํŒจ ์˜ˆ์‹œ (error๊ฐ€ ์žˆ์œผ๋ฉด ๋ฐ˜๋“œ์‹œ ์ˆ˜์ •):

      error โ€ข Target of URI doesn't exist: 'package:...' โ€ข lib/main.dart:5:8 โ€ข uri_does_not_exist
      error โ€ข The getter 'xyz' isn't defined for the type 'ABC' โ€ข lib/presentation/screens/home.dart:42:15
      
  3. ๊ฒ€์ฆ ๊ฒฐ๊ณผ ์š”์•ฝ (์„ฑ๊ณต ์‹œ):

    โœ… Flutter ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ ์™„๋ฃŒ!
    โœ… ์ฝ”๋“œ ์ƒ์„ฑ ์™„๋ฃŒ (Freezed, Drift, JSON Serializable)
    โœ… Flutter analyze ํ†ต๊ณผ (0-1 issues found, info ๋ ˆ๋ฒจ๋งŒ)
    โœ… ๋ชจ๋“  ํŒจํ‚ค์ง€ ์„ค์น˜ ์™„๋ฃŒ
    
  4. ํ”„๋กœ์ ํŠธ ์ •๋ณด ์ œ๊ณต:

    • ํด๋”๋ช…: [์‚ฌ์šฉ์ž ์ž…๋ ฅ๊ฐ’] (์˜ˆ: my_habit_app)
    • ํ”„๋กœ์ ํŠธ๋ช… (ํŒจํ‚ค์ง€๋ช…): [์‚ฌ์šฉ์ž ์ž…๋ ฅ๊ฐ’] (์˜ˆ: habit_app)
    • ์กฐ์ง๋ช…: [์‚ฌ์šฉ์ž ์ž…๋ ฅ๊ฐ’] (์˜ˆ: com.example)
    • ๋„๋ฉ”์ธ: [์„ ํƒ๋œ ๋„๋ฉ”์ธ] (Todo/Habit/Note/Expense/Custom)
    • ์„ ํƒ๋œ ์Šคํƒ: [ํ”„๋ฆฌ์…‹๋ช…] (GoRouter, Drift, FPDart ๋“ฑ)
    • ์ฃผ์š” ๊ธฐ๋Šฅ: [๋„๋ฉ”์ธ] CRUD, ๋‹ค๊ตญ์–ด ์ง€์›, ๋กœ์ปฌ ์ €์žฅ์†Œ ๋“ฑ
    • ์ƒ์„ฑ๋œ ํŒŒ์ผ: XX๊ฐœ Dart ํŒŒ์ผ (core, data, domain, presentation)
  5. ์‹คํ–‰ ๋ฐฉ๋ฒ• ์•ˆ๋‚ด:

    cd [ํด๋”๋ช…]
    flutter run
    
  6. ๋‹ค์Œ ๋‹จ๊ณ„ ์ œ์•ˆ (์„ ํƒ์‚ฌํ•ญ, ๋„๋ฉ”์ธ๋ณ„):

    • Todo: ํ•ญ๋ชฉ ์ถ”๊ฐ€/์ˆ˜์ •/์‚ญ์ œ, ํ•„ํ„ฐ๋ง(์ „์ฒด/์ง„ํ–‰์ค‘/์™„๋ฃŒ), ์™„๋ฃŒ ํ† ๊ธ€
    • Habit: ์Šต๊ด€ ๊ธฐ๋ก, ์—ฐ์† ๊ธฐ๋ก ํ™•์ธ, ๋ชฉํ‘œ ๋‹ฌ์„ฑ๋ฅ , ํ†ต๊ณ„ ํ™•์ธ
    • Note: ๋ฉ”๋ชจ ์ž‘์„ฑ/ํŽธ์ง‘, ํƒœ๊ทธ ์ถ”๊ฐ€, ๊ณ ์ • ๋ฉ”๋ชจ, ๊ฒ€์ƒ‰
    • Expense: ์ง€์ถœ ๊ธฐ๋ก, ์นดํ…Œ๊ณ ๋ฆฌ๋ณ„ ํ†ต๊ณ„, ์›”๋ณ„ ์ง‘๊ณ„, ํ•„ํ„ฐ๋ง
    • ๊ณตํ†ต: ์–ธ์–ด ์ „ํ™˜ (์˜์–ด โ†” ํ•œ๊ตญ์–ด), ๋‹คํฌ/๋ผ์ดํŠธ ํ…Œ๋งˆ ์ „ํ™˜

Core Principles

  • Repository ํŒจํ„ด: ๋ฐ์ดํ„ฐ ๋ ˆ์ด์–ด์™€ ๋„๋ฉ”์ธ ๋ ˆ์ด์–ด ๋ถ„๋ฆฌ
  • ์˜์กด์„ฑ ์ฃผ์ž…: Riverpod 3.x๋ฅผ ํ†ตํ•œ ์˜์กด์„ฑ ๊ด€๋ฆฌ
  • ๋ถˆ๋ณ€์„ฑ: Freezed๋กœ ๋ถˆ๋ณ€ ๋ชจ๋ธ ์ƒ์„ฑ
  • ๋‹ค๊ตญ์–ด ์ง€์›: Easy Localization์œผ๋กœ i18n
  • ๋ชจ๋˜ UI: FluentUI Icons ์‚ฌ์šฉ

Reference Files

references/setup-guide.md - ์™„์ „ํ•œ ๊ฐ€์ด๋“œ

  • ๊ธฐ๋ณธ ์…‹์—… (๋„๋ฉ”์ธ๋ณ„ CRUD, ๋‹ค๊ตญ์–ด, FluentUI Icons)
  • ์„ ํƒ ์˜ต์…˜: GoRouter, Auth, FPDart, Google Fonts, Responsive Utils, ํŒจํ‚ค์ง€ ์—…๋ฐ์ดํŠธ

Notes

  • ๋Œ€ํ™”ํ˜• ์Šคํ‚ฌ: ์‚ฌ์šฉ์ž์—๊ฒŒ ๋„๋ฉ”์ธ๊ณผ ํ”„๋ฆฌ์…‹ ์„ ํƒ์„ ํ†ตํ•ด ๋งž์ถคํ˜• ์•ฑ ๊ตฌ์„ฑ
  • ๋„๋ฉ”์ธ ์ง€์›: Todo, Habit, Note, Expense, Custom (์‚ฌ์šฉ์ž ์ •์˜)
  • ํ”„๋ฆฌ์…‹ ์ œ๊ณต: Full Stack, Essential, Minimal, Custom
  • ์„ ํƒ ๊ฐ€๋Šฅ ๊ธฐ๋Šฅ: GoRouter, Auth, FPDart, Google Fonts, Responsive Utils
  • ๊ธฐ๋ณธ ํฌํ•จ: Riverpod 3.x, Easy Localization, FluentUI Icons, Drift, Dio, SharedPreferences
  • ๋‹ค๊ตญ์–ด: ์˜์–ด/ํ•œ๊ตญ์–ด (ํ™•์žฅ ๊ฐ€๋Šฅ)
  • ํ”Œ๋žซํผ: Android/Kotlin, iOS/Swift (์›น/์œˆ๋„์šฐ/๋ฆฌ๋ˆ…์Šค ์ œ์™ธ)
  • ํ’ˆ์งˆ ๋ณด์ฆ:
    • ๋ชจ๋“  ํ”„๋กœ์ ํŠธ๋Š” flutter analyze ํ†ต๊ณผ ํ•„์ˆ˜
    • package: imports ์Šคํƒ€์ผ ์ค€์ˆ˜
    • ํƒ€์ž… ์•ˆ์ „์„ฑ ๋ณด์žฅ
    • ์ฝ”๋“œ ์ƒ์„ฑ ์ž๋™ํ™”
    • ๋„๋ฉ”์ธ๋ณ„ ์ตœ์ ํ™”๋œ UI/UX