关于 flutter-init
flutter-init 是交互式 Flutter 应用生成技能,可按所选领域和技术预设创建项目。它生成基于 Clean Architecture 的 CRUD 结构、配置所选软件包,并通过 flutter analyze 检查结果。
主要功能
- 01生成 Todo、Habit、Note、Expense 或自定义应用
- 02交互选择项目与技术预设
- 03创建 Clean Architecture CRUD 脚手架
- 04配置软件包与项目设置
- 05执行代码生成和 flutter analyze
适用场景
- 01启动 Flutter Todo 或 Habit 跟踪应用
- 02创建 Note 或 Expense 管理应用
- 03搭建自定义实体的 CRUD 项目
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ bear2u/ my-skills --skill flutter-init安装后在 Claude Code 中输入/flutter-init确认已加载。
附带文件README.mdreferences/setup-guide.md
详细介绍
Flutter Init Skill
根据领域创建 Flutter 项目,并自动配置现代化架构。 选择 Todo、Habit、Note、Expense 或 Custom 领域,即可立即生成基于 Clean Architecture 的完整 CRUD 应用。
快速开始
运行技能时,系统会要求输入以下信息:
- 文件夹名称(例如: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
任务说明
重要:此技能以交互方式运行。
步骤 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)”
步骤 2:选择 Custom 时的后续问题
2-1. 选择 Custom 领域(E)时:
- 实体名称:输入实体名称(例如:Task、Event、Book)
- 字段定义:输入各个字段(格式:字段名:类型,例如:title:String、amount:double、isActive:bool)
- 支持的类型:String、int、double、bool、DateTime
- 自动添加 createdAt 和 updatedAt
- 主要功能:选择用于筛选/排序的字段
2-2. 选择 Custom 技术栈预设(D)时:
依次询问以下问题:
- 导航:是否使用 GoRouter?(是/否)
- 错误处理:是否使用 FPDart?(是/否)
- UI:是否使用 Google Fonts?(是/否)
- 响应式:是否包含 Responsive Utils?(是/否)
- 认证系统:是否包含 Auth 系统?(是/否)
步骤 3:根据所选领域和技术栈创建项目
-
创建 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字段
-
确认 Kotlin DSL(最新版 Flutter 会自动使用 Kotlin DSL)
-
安装所选软件包:更新
pubspec.yaml后运行flutter pub get -
创建文件夹结构:Clean Architecture(core、data、domain、presentation)
-
生成领域专属样板代码:
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:基本列表 provider
- UI:基本的 List/Detail/Form 页面
-
创建配置文件(路由、存储、多语言等)
-
更新 Android 设置(对于 flutter_local_notifications 至关重要):
- 在
android/app/build.gradle.kts中启用核心库脱糖:android { compileOptions { sourceCompatibility = JavaVersion.VERSION_11 targetCompatibility = JavaVersion.VERSION_11 isCoreLibraryDesugaringEnabled = true // 추가 } } dependencies { coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:2.0.4") // 추가 }
- 在
-
生成代码:
dart run build_runner build --delete-conflicting-outputs -
验证代码并修复错误:
a. 运行
flutter analyzeb. 修复发现的错误:
- 兼容 Freezed 3.0(至关重要):所有 Freezed 实体都必须使用
sealed class- ❌
class User with _$User - ✅
sealed class User with _$User
- ❌
- 主题设置:使用
CardThemeData替代已弃用的CardTheme - API Client Map 类型:返回
Map<String, dynamic>时验证生成的代码- 如果出现 retrofit_generator 生成的
dynamic.fromJson错误,需要进行修复
- 如果出现 retrofit_generator 生成的
- 修正 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 级别的问题)✅ 至关重要:此步骤为必需步骤。必须清除所有 error 才能进入下一步。
- 兼容 Freezed 3.0(至关重要):所有 Freezed 实体都必须使用
步骤 4:最终验证与说明
✅ CRITICAL:此步骤是项目完成的必要条件。
-
运行最终分析:
flutter analyze -
成功标准:
-
✅ 成功示例:
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
-
-
验证结果摘要(成功时):
✅ Flutter 프로젝트 생성 완료! ✅ 코드 생성 완료 (Freezed, Drift, JSON Serializable) ✅ Flutter analyze 통과 (0-1 issues found, info 레벨만) ✅ 모든 패키지 설치 완료 -
提供项目信息:
- 文件夹名:[用户输入值](例如:my_habit_app)
- 项目名(包名):[用户输入值](例如:habit_app)
- 组织名:[用户输入值](例如:com.example)
- 领域:[所选领域](Todo/Habit/Note/Expense/Custom)
- 所选技术栈:[预设名称](GoRouter、Drift、FPDart 等)
- 主要功能:[领域] CRUD、多语言支持、本地存储等
- 生成的文件:XX 个 Dart 文件(core、data、domain、presentation)
-
运行方式说明:
cd [폴더명] flutter run -
后续步骤建议(可选,按领域区分):
- Todo:添加/修改/删除条目、筛选(全部/进行中/已完成)、切换完成状态
- Habit:记录习惯、查看连续记录、目标完成率、查看统计数据
- Note:编写/编辑笔记、添加标签、置顶笔记、搜索
- Expense:记录支出、按类别查看统计、按月汇总、筛选
- 通用:切换语言(英语 ↔ 韩语)、切换深色/浅色主题
核心原则
- Repository 模式:分离数据层和领域层
- 依赖注入:通过 Riverpod 3.x 管理依赖项
- 不可变性:使用 Freezed 创建不可变模型
- 多语言支持:使用 Easy Localization 实现 i18n
- 现代 UI:使用 FluentUI Icons
参考文件
references/setup-guide.md - 完整指南
- 基础设置(按领域配置 CRUD、多语言、FluentUI Icons)
- 可选项:GoRouter、Auth、FPDart、Google Fonts、Responsive Utils、更新包
说明
- 交互式技能:让用户选择领域和预设,配置定制化应用
- 领域支持: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(不包括 Web/Windows/Linux)
- 质量保证:
- 所有项目都必须通过
flutter analyze - 遵循 package: 导入风格
- 确保类型安全
- 自动生成代码
- 按领域优化 UI/UX
- 所有项目都必须通过