Cursor AI Skills 实战:自动生成 Flutter 页面、代码与文档

Cursor AI Skills 实战:自动生成 Flutter 页面、代码与文档

视频

youtu.be/UeJYlTpm4ek

www.bilibili.com/video/BV1xp...

前言

本文系统介绍如何使用 Cursor AI Skills 自动生成 Flutter 页面、初始化项目结构,并持续维护项目技术文档。适合 Flutter 开发者与 AI 编程实践者,快速构建高效、可复用的 Flutter 开发工作流。

原文 使用 Cursor AI Skills 实现 Flutter 自动化开发(完整指南)

分类: Cursor AI / Cursor AI Skills、Flutter / Flutter AI、AI 编程 / AI 代码生成

参考

正文

配置 Cursor 支持 Skills

进入 Cursor Setting -> Beta , Update Access 选择 Nightly,升级后重启。

在 Rules, Subagents,Commands 面板下,开启 Import Agent Skills 重启。

重启后 claude 、codex 的 skills 就会全局可用。

例子 1: Flutter创建页面组手(全局)

编写文件 .codex/skills/Flutter创建页面组手/SKILL.md

markdown 复制代码
---
name: "Flutter创建页面组手"
description: "Flutter 项目中创建页面"
---

# Flutter创建页面组手

按规则生成空页面脚手架代码。

## 读取变量

- 读取 [保存目录]
- 读取 [业务名称]
- 通过 [业务名称] 生成 [业务代码] (我的页面 -> my_page)
- [业务代码] 使用规则举例如下:
  - 文件名 my_page
  - 类名 MyPage
  - 变量名 myPage
  - 接口名 IMyPage

## 约束规则

页面必须包含在 lib/pages 目录下面

## 页面目录

如果 [业务代码] 时 my_page,目录结构如下:

- [保存目录]
  - my_page             // 业务目录
    - widget            // 业务组建
    - view.dart         // 视图代码
    - controller.dart   // 控制器代码
    - index.dart        // index 导包代码

## 页面代码

如果 [业务代码] 时 my_page,代码如下:

- index.dart        // index 导包代码

```dart
library;

export './controller.dart';
export './view.dart';
```

- controller.dart   // 控制器代码

```dart
import 'package:get/get.dart';

class MyPageController extends GetxController {
  MyPageController();

  _initData() {
    update(["my_page"]);
  }

  void onTap() {}

  // @override
  // void onInit() {
  //   super.onInit();
  // }

  @override
  void onReady() {
    super.onReady();
    _initData();
  }

  // @override
  // void onClose() {
  //   super.onClose();
  // }
}
```

- view.dart         // 视图代码

```dart
import 'package:flutter/material.dart';
import 'package:get/get.dart';

import 'index.dart';

class MyPagePage extends GetView<MyPageController> {
  const MyPagePage({super.key});

  // 主视图
  Widget _buildView() {
    return const Center(
      child: Text("MyPagePage"),
    );
  }

  @override
  Widget build(BuildContext context) {
    return GetBuilder<MyPageController>(
      init: MyPageController(),
      id: "my_page",
      builder: (_) {
        return Scaffold(
          appBar: AppBar(title: const Text("my_page")),
          body: SafeArea(
            child: _buildView(),
          ),
        );
      },
    );
  }
}
```

## 保存总导包 index

文件 lib/pages/index.dart

追加在这个文件中即可

提示词

bash 复制代码
用 skill 在 lib/pages/cart 中创建页面 业务 购物历史,业务代码 cart_history

输出

例子 2:Flutter项目初始化(全局)

编写文件 .codex/skills/Flutter项目初始化/SKILL.md

markdown 复制代码
---
name: Flutter项目初始化
description: 用猫哥的 ducafe_ui_core + getx 初始化一个规范的 flutter 项目。
---

# Flutter项目初始化

## 安装依赖包

```shell
flutter pub add get
flutter pub add ducafe_ui_core
```

## 1 创建业务 index 页面

- 使用 skill 在 lib/pages 目录下创建业务 首页,业务代码 index。

- 没有 lib/pages 目录自动创建。

## 2 创建全局 Global 模块

文件位置 lib/global.dart

```dart
import 'package:flutter/material.dart';

class Global {
  static Future<void> init() async {
    // 插件初始化
    // WidgetsFlutterBinding.ensureInitialized();

    // // 工具类
    // await Storage().init();

    // // 提示框
    // Loading();

    // // 加载服务
    // Get.put<ConfigService>(ConfigService()); // 配置
    // Get.put<WPHttpService>(WPHttpService()); // 网络请求
    // Get.put<UserService>(UserService()); // 用户
    // Get.put<CartService>(CartService()); // 购物车

    // // 初始化配置
    // await ConfigService.to.init();
  }
}
```

## 3 创建 common 通用模块

文件位置 lib/common/

### 目录结构

```text
lib/common/
├── api/              # API 接口
│   └── index.dart
├── components/       # 通用组件
│   └── index.dart
├── extension/        # 扩展方法
│   └── index.dart
├── i18n/             # 国际化
│   └── index.dart
├── models/           # 数据模型
│   └── index.dart
├── routers/          # 路由配置
│   ├── index.dart
│   ├── names.dart
│   └── pages.dart
├── services/         # 服务层
│   └── index.dart
├── style/            # 样式
│   └── index.dart
├── utils/            # 工具类
│   └── index.dart
├── values/           # 常量值
│   ├── index.dart
│   ├── constants.dart
│   ├── images.dart
│   └── svgs.dart
├── widgets/          # 通用小部件
│   └── index.dart
└── index.dart        # 统一导出
```

### 文件规则

#### lib/common/index.dart

```dart
library;

export 'api/index.dart';
export 'components/index.dart';
export 'extension/index.dart';
export 'i18n/index.dart';
export 'models/index.dart';
export 'routers/index.dart';
export 'services/index.dart';
export 'style/index.dart';
export 'utils/index.dart';
export 'values/index.dart';
export 'widgets/index.dart';
```

#### lib/common/routers/names.dart

```dart
class RouteNames {
  static const main = '/';
}
```

#### lib/common/routers/pages.dart

```dart
class RoutePages {
  // 列表
  // static List<GetPage> list = [];
}
```

#### lib/common/routers/index.dart

```dart
library;

export 'names.dart';
export 'pages.dart';
```

#### lib/common/values/constants.dart

```dart
/// 常量
class Constants {
  // 服务 api
  static const apiUrl = 'https://api.example.com';
}
```

#### lib/common/values/images.dart

```dart
/// 图片 assets
class AssetsImages {
}
```

#### lib/common/values/svgs.dart

```dart
/// svgs assets
class AssetsSvgs {
}
```

#### lib/common/values/index.dart

```dart
library;

export 'constants.dart';
export 'images.dart';
export 'svgs.dart';
```

#### 其他模块 index.dart 模板

- api
- components
- extension
- i18n/
- models
- services
- style
- utils
- widgets

这些目录下的 index.dart 统一使用:

```dart
library;

// export './xxxx.dart';
```

## 重写 main.dart

lib/main.dart

```dart
import 'package:ducafe_ui_core/ducafe_ui_core.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart';

import 'pages/index.dart';
import 'global.dart';

void main() async {
  await Global.init();
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return ScreenUtilInit(
      designSize: const Size(414, 896), // 设计稿中设备的尺寸(单位随意,建议dp,但在使用过程中必须保持一致)
      // splitScreenMode: false, // 支持分屏尺寸
      // minTextAdapt: false, // 是否根据宽度/高度中的最小值适配文字
      builder: (context, child) {
        return GetMaterialApp(
          title: 'Flutter Demo',
          theme: ThemeData(primarySwatch: Colors.blue),
          home: const IndexPage(),
        );
      },
    );
  }
}
```

提示词

复制代码
使用 skill 初始化当前 flutter 项目

输出

例子 3:编写技术说明(项目)

编写 .cursor/skills/编写技术说明/SKILL.md

markdown 复制代码
---
name: 编写技术说明
description:  对当前项目进行技术整理并保存到文档中。
---

# 项目技术说明

你是一名资深 Flutter 架构师和技术文档专家。

我将持续向你提供一个 Flutter 项目的代码结构、关键文件、以及最近一次"改动内容"。

你的任务是:
1️⃣ 对当前 Flutter 项目进行技术架构分析  
2️⃣ 在"已有技术文档"的基础上 **增量更新**,而不是全部重写  
3️⃣ 明确标注「本次新增 / 修改 / 废弃」的技术点  
4️⃣ 输出一份结构化、可长期维护的技术说明文档  

请始终假设:

- 该项目是一个**长期维护的真实业务项目**
- 文档读者是:中高级 Flutter 开发者
- 目标是:**可读、可持续演进**

---

## 文档保存位置

docs/技术说明.md

## 📌 项目信息(如有)

- 项目名称:
- Flutter 版本:
- 状态管理方案(如 Riverpod / Bloc / GetX 等):
- 架构风格(如 Clean Architecture / Feature First 等):

## 📌 已有技术文档(如存在)

【我会粘贴当前版本的技术文档】

## 📌 本次改动内容

【我会描述或粘贴本次代码变更 / 新增模块 / 重构点】

---

## 🎯 输出要求

### 一、项目整体架构(如无重大变化,简要说明)

- 架构分层
- 模块职责
- 关键设计原则

### 二、本次迭代技术变更(重点)

- 🆕 新增内容
- 🔄 修改内容
- 🗑️ 废弃或替代方案
- 变更动机 & 技术取舍说明

### 三、关键代码设计解读

- 重要类 / 模块职责
- 状态流转说明
- 数据流 & 依赖方向

### 四、对项目长期维护的影响

- 可扩展性
- 可测试性
- 潜在风险 & 建议

### 五、文档版本记录(必须输出)

- 文档版本号(如 v1.2.0)
- 更新时间
- 本次更新摘要(3~5 条)

---

## ✍️ 写作风格要求

- 使用 **工程师视角**,避免空话
- 关键地方可用「为什么这样设计」
- 允许适度口语化,但保持专业
- 使用 Markdown 输出,方便直接入库或发布

提示词

复制代码
使用 skill 编写技术说明

输出

总结要点

通过 Cursor AI Skills,Flutter 开发者可以将页面创建、项目初始化以及技术文档维护等重复性工作交给 AI 自动完成。本文结合实际示例,系统讲解了如何构建全局与项目级别的 Cursor Skills,实现高效、可持续的 Flutter 自动化开发流程。这种 AI 辅助编程方式,正在成为 Flutter 项目提效的新标准。

感谢阅读本文

如果有什么建议,请在评论中让我知道。我很乐意改进。


© 猫哥 ducafecat.com

end

相关推荐
有意义14 小时前
一个在校学生的 Vibe-Coding道路
ai编程·trae·vibecoding
QING61814 小时前
移动端攻城狮 —— 浅谈 AI 编程对我的影响?
openai·ai编程·cursor
名誉寒冰14 小时前
基于 React + Three.js + 大模型的全息地球 Web 项目(水个web课程设计)
前端·javascript·react.js·ai编程
秋915 小时前
idea中使用AI编程助手通义灵码详解
java·intellij-idea·ai编程
xkxnq15 小时前
第一阶段:Vue 基础入门(第 8 天)
前端·vue.js·flutter
paopao_wu15 小时前
LangChainV1.0[06]-Prompt/上下文/结构化输出
人工智能·langchain·prompt·ai编程
kirk_wang15 小时前
Flutter flutter_pdfview 在 OpenHarmony 平台的适配实战:原理与实现指南
flutter·移动开发·跨平台·arkts·鸿蒙
待续30120 小时前
Gemini CLI 终极使用指南
ai编程
用户47949283569151 天前
怕 AI 乱改代码?教你用 Hooks 给 Claude Code 戴上"紧箍咒"
aigc·ai编程·claude