核心亮点
flu-cli 不仅仅是一个代码生成工具,它是一个完整的 Flutter MVVM 开发解决方案。以下是让 flu-cli 脱颖而出的核心特性。
🎨 现代化交互体验
Clack UI - 业界最美观的 CLI 界面
flu-cli 采用 @clack/prompts,与 Vercel、Astro 等顶级工具使用相同的 UI 框架。
特点:
- ✨ 精美的视觉设计和配色
- 🎯 清晰的视觉层次
- 💫 流畅的交互动画
- 📊 实时的状态反馈
- 🎭 专业的 Spinner 和进度提示
实时模板预览
在选择模板时,实时查看:
- 📝 模板详细描述
- 🏗️ 完整的目录结构
- 👥 适用团队规模
- 📊 代码量级别
- ⭐ 核心特性列表
不需要创建项目后才发现模板不合适,所见即所得!
智能交互设计
- 智能默认值: 每个输入都有合理的默认值
- 记忆功能: 记住你的选择(作者名、默认模板)
- 快速确认: 直接回车使用默认值
- 友好提示: 清晰的说明和示例
⚡ 极速创建项目
6 次回车,10 秒完成
所有输入都有智能默认值,你只需要:
- 回车 - 使用默认项目名
my_app - 回车 - 使用默认模板
Lite - 回车 - 使用默认路径
- 回车 - 使用默认包名
- 回车 - 使用默认作者
- 回车 - 确认创建
真正的极速开发体验!
智能缓存机制
- 模板缓存: 首次下载后缓存到本地,后续创建秒级完成
- 增量更新: 只更新变化的文件
- 可选刷新: 使用
--no-cache强制更新
记忆上次选择
- 默认模板: 记住你上次选择的模板,下次自动定位
- 作者信息: 输入一次,永久记住
- 自定义模板: 自动保存到配置文件
🎯 灵活的模板系统
三种内置模板
根据项目规模和团队大小,选择最合适的架构:
| 模板 | 适用场景 | 团队规模 | 代码量 | 复杂度 |
|---|---|---|---|---|
| Lite | 快速原型、个人项目 | 1-3 人 | <10k 行 | ⭐ |
| Modular | 中型项目、团队协作 | 3-10 人 | 10k-50k 行 | ⭐⭐⭐ |
| Clean | 大型项目、企业应用 | 5+ 人 | >20k 行 | ⭐⭐⭐⭐⭐ |
详细对比: 查看模板对比
自定义模板支持
不满足于内置模板?flu-cli 支持:
本地模板
bash
# 交互式创建时选择"新增自定义模板(本地)"
# 输入本地模板目录的绝对路径
/Users/yourname/my-flutter-templateGit 模板
bash
# 交互式创建时选择"新增自定义模板(Git)"
# 输入仓库地址和分支
https://github.com/yourorg/flutter-template.git
分支: main智能合并:
- ✅ 自动合并
pubspec.yaml依赖 - ✅ 保留你的项目名和包名
- ✅ 保留平台配置(android/ios)
- ✅ 只复制通用代码(lib/assets/.vscode)
详细说明: 查看自定义模板
模板记忆功能
创建自定义模板后:
- 自动保存到
~/.flu-cli/config.json - 下次创建时出现在模板列表
- 记住为默认选择,光标自动定位
- 支持多个自定义模板
📝 片段驱动生成
什么是片段驱动?
通过 VSCode 代码片段(Snippets)自定义代码生成内容,让团队统一代码风格和最佳实践。
工作原理
- 在项目根创建
.vscode/dart.code-snippets - 定义片段,如
flu.stPage、flu.viewmodel - flu-cli 生成代码时优先使用片段
- 片段不存在时回退到内置模板
支持的片段键
- 页面:
flu.stPage(Stateful)、flu.lessPage(Stateless) - 组件:
flu.stWidget、flu.lessWidget、flu.component - 逻辑:
flu.viewmodel - 服务:
flu.service.api、flu.service.auth、flu.service.storage - 模型:
flu.model
变量占位符
支持以下变量,自动替换:
- PascalCase,如HomePage- camelCase,如homePage- snake_case,如home_page- Title Case,如Home Page- ViewModel 相对导入路径(自动计算)
示例片段
json
{
"Flutter Stateful Page": {
"prefix": "flu.stPage",
"body": [
"import 'package:flutter/material.dart';",
"import '${1:{{vm_import}}}';",
"",
"class {{Name}}Page extends StatefulWidget {",
" const {{Name}}Page({super.key});",
"",
" @override",
" State<{{Name}}Page> createState() => _{{Name}}PageState();",
"}",
"",
"class _{{Name}}PageState extends State<{{Name}}Page> {",
" late final {{Name}}ViewModel _viewModel;",
"",
" @override",
" void initState() {",
" super.initState();",
" _viewModel = {{Name}}ViewModel();",
" }",
"",
" @override",
" Widget build(BuildContext context) {",
" return Scaffold(",
" appBar: AppBar(title: const Text('{{title}}')),",
" body: const Center(child: Text('{{title}}')),",
" );",
" }",
"",
" @override",
" void dispose() {",
" _viewModel.dispose();",
" super.dispose();",
" }",
"}"
]
}
}详细说明: 查看片段驱动生成
🚀 完整的代码生成
支持的生成类型
| 类型 | 命令 | 说明 |
|---|---|---|
| Page | flu-cli a page <name> | 页面 + ViewModel |
| Widget | flu-cli a widget <name> | 简单组件 |
| Component | flu-cli a component <name> | 复合组件 |
| ViewModel | flu-cli a vm <name> | 视图模型 |
| Service | flu-cli a service <name> | 业务服务 |
| Model | flu-cli a model <name> | 数据模型 |
| Module | flu-cli a module <name> | 完整模块 |
智能特性
自动更新 index.dart
生成代码时自动添加 export 语句:
dart
// lib/features/user/pages/index.dart
export 'user_list_page.dart';
export 'user_detail_page.dart';依赖提示
生成 Service 时自动提示需要的依赖:
bash
flu-cli a service api --type api
# 输出:
✓ Service 创建成功
ℹ 请添加依赖: http: ^1.1.0类型推断
从 JSON 生成 Model 时自动推断类型:
json
{
"id": "123",
"name": "John",
"age": 30,
"is_active": true
}生成:
dart
class User {
final String id;
final String name;
final int age;
final bool isActive;
// fromJson, toJson...
}功能模块支持
使用 -f 参数在指定模块中生成代码:
bash
# 在 user 模块中生成
flu-cli a page user_list -f user
flu-cli a service user -f user --type api
flu-cli a model user -f user生成位置:
lib/features/user/
├── pages/user_list_page.dart
├── services/user_service.dart
└── models/user_model.dart🔧 高度可定制
配置文件
全局配置保存在 ~/.flu-cli/config.json:
json
{
"authorName": "Your Name",
"defaultTemplate": {
"type": "builtin",
"idOrName": "modular"
},
"customTemplates": [
{
"id": "custom-1",
"name": "My Template",
"type": "git",
"repo": "https://github.com/yourorg/template.git",
"branch": "main"
}
]
}VSCode 片段
项目级片段配置在 .vscode/dart.code-snippets,团队共享。
灵活的命令参数
每个命令都支持丰富的参数:
bash
# 创建 StatefulWidget 页面
flu-cli a page home --stateful
# 创建页面但不生成 ViewModel
flu-cli a page home --no-vm
# 指定 Service 类型
flu-cli a service auth --type auth
# 从 JSON 生成 Model
flu-cli a model user --json user.json🎯 团队协作友好
统一项目结构
使用自定义模板确保团队项目结构一致。
统一代码风格
使用 VSCode 片段统一代码生成风格。
版本控制
- 模板配置可提交到 Git
- 片段文件可提交到 Git
- 团队成员自动同步
文档完善
- 详细的使用文档
- 丰富的示例
- 最佳实践指南