Skip to content

核心亮点

flu-cli 不仅仅是一个代码生成工具,它是一个完整的 Flutter MVVM 开发解决方案。以下是让 flu-cli 脱颖而出的核心特性。

🎨 现代化交互体验

Clack UI - 业界最美观的 CLI 界面

flu-cli 采用 @clack/prompts,与 Vercel、Astro 等顶级工具使用相同的 UI 框架。

特点

  • ✨ 精美的视觉设计和配色
  • 🎯 清晰的视觉层次
  • 💫 流畅的交互动画
  • 📊 实时的状态反馈
  • 🎭 专业的 Spinner 和进度提示

实时模板预览

在选择模板时,实时查看:

  • 📝 模板详细描述
  • 🏗️ 完整的目录结构
  • 👥 适用团队规模
  • 📊 代码量级别
  • ⭐ 核心特性列表

不需要创建项目后才发现模板不合适,所见即所得!

智能交互设计

  • 智能默认值: 每个输入都有合理的默认值
  • 记忆功能: 记住你的选择(作者名、默认模板)
  • 快速确认: 直接回车使用默认值
  • 友好提示: 清晰的说明和示例

⚡ 极速创建项目

6 次回车,10 秒完成

所有输入都有智能默认值,你只需要:

  1. 回车 - 使用默认项目名 my_app
  2. 回车 - 使用默认模板 Lite
  3. 回车 - 使用默认路径
  4. 回车 - 使用默认包名
  5. 回车 - 使用默认作者
  6. 回车 - 确认创建

真正的极速开发体验!

智能缓存机制

  • 模板缓存: 首次下载后缓存到本地,后续创建秒级完成
  • 增量更新: 只更新变化的文件
  • 可选刷新: 使用 --no-cache 强制更新

记忆上次选择

  • 默认模板: 记住你上次选择的模板,下次自动定位
  • 作者信息: 输入一次,永久记住
  • 自定义模板: 自动保存到配置文件

🎯 灵活的模板系统

三种内置模板

根据项目规模和团队大小,选择最合适的架构:

模板适用场景团队规模代码量复杂度
Lite快速原型、个人项目1-3 人<10k 行
Modular中型项目、团队协作3-10 人10k-50k 行⭐⭐⭐
Clean大型项目、企业应用5+ 人>20k 行⭐⭐⭐⭐⭐

详细对比: 查看模板对比

自定义模板支持

不满足于内置模板?flu-cli 支持:

本地模板

bash
# 交互式创建时选择"新增自定义模板(本地)"
# 输入本地模板目录的绝对路径
/Users/yourname/my-flutter-template

Git 模板

bash
# 交互式创建时选择"新增自定义模板(Git)"
# 输入仓库地址和分支
https://github.com/yourorg/flutter-template.git
分支: main

智能合并

  • ✅ 自动合并 pubspec.yaml 依赖
  • ✅ 保留你的项目名和包名
  • ✅ 保留平台配置(android/ios)
  • ✅ 只复制通用代码(lib/assets/.vscode)

详细说明: 查看自定义模板

模板记忆功能

创建自定义模板后:

  • 自动保存到 ~/.flu-cli/config.json
  • 下次创建时出现在模板列表
  • 记住为默认选择,光标自动定位
  • 支持多个自定义模板

📝 片段驱动生成

什么是片段驱动?

通过 VSCode 代码片段(Snippets)自定义代码生成内容,让团队统一代码风格和最佳实践。

工作原理

  1. 在项目根创建 .vscode/dart.code-snippets
  2. 定义片段,如 flu.stPageflu.viewmodel
  3. flu-cli 生成代码时优先使用片段
  4. 片段不存在时回退到内置模板

支持的片段键

  • 页面: flu.stPage(Stateful)、flu.lessPage(Stateless)
  • 组件: flu.stWidgetflu.lessWidgetflu.component
  • 逻辑: flu.viewmodel
  • 服务: flu.service.apiflu.service.authflu.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();",
            "  }",
            "}"
        ]
    }
}

详细说明: 查看片段驱动生成

🚀 完整的代码生成

支持的生成类型

类型命令说明
Pageflu-cli a page <name>页面 + ViewModel
Widgetflu-cli a widget <name>简单组件
Componentflu-cli a component <name>复合组件
ViewModelflu-cli a vm <name>视图模型
Serviceflu-cli a service <name>业务服务
Modelflu-cli a model <name>数据模型
Moduleflu-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
  • 团队成员自动同步

文档完善

  • 详细的使用文档
  • 丰富的示例
  • 最佳实践指南

下一步

Released under the MIT License.