自定义模板
除了内置模板,Flu CLI VSCode 扩展支持使用自定义模板,让你可以打造符合团队规范的项目结构。
模板类型
扩展支持两种自定义模板:
| 类型 | 说明 | 适用场景 |
|---|---|---|
| Git 仓库 | 从 Git 仓库克隆模板 | 团队共享、版本控制 |
| 本地文件夹 | 使用本地目录作为模板 | 个人使用、快速测试 |
添加 Git 模板
步骤 1:准备 Git 仓库
确保你的 Git 仓库包含有效的 Flutter 项目结构:
my-template/
├── lib/
│ └── main.dart
├── pubspec.yaml
├── README.md
└── ...要求:
- 必须包含
pubspec.yaml - 必须包含
lib/main.dart - 推荐包含
.gitignore
步骤 2:添加模板
- 创建新项目时,选择 "自定义模板..."
- 选择 "添加自定义模板"
- 选择 "Git 仓库"
- 输入 Git URL
支持的 Git 平台:
- GitHub:
https://github.com/username/repo.git - GitLab:
https://gitlab.com/username/repo.git - Gitee:
https://gitee.com/username/repo.git - 私有仓库:
https://git.company.com/team/repo.git
步骤 3:输入模板名称
输入一个易于识别的名称,如:
团队标准模板电商项目模板企业级模板
步骤 4:等待下载
扩展会自动:
- 克隆 Git 仓库
- 缓存到本地
- 验证模板有效性
- 添加到模板列表
步骤 5:使用模板
下次创建项目时,你的自定义模板会出现在模板列表中,使用方式与内置模板相同。
添加本地模板
步骤 1:准备本地目录
确保本地目录包含有效的 Flutter 项目结构。
步骤 2:添加模板
- 创建新项目时,选择 "自定义模板..."
- 选择 "添加自定义模板"
- 选择 "本地文件夹"
- 浏览到模板目录
步骤 3:输入模板名称
输入模板名称,如 我的本地模板。
步骤 4:完成
模板立即可用,无需下载。
管理模板
查看模板列表
创建项目时,所有模板(内置 + 自定义)都会显示在列表中。
模板信息:
- 模板名称
- 模板类型(内置/Git/本地)
- 最后使用时间
- 模板路径
删除模板
- 创建项目时,选择 "自定义模板..."
- 选择 "管理自定义模板"
- 选择要删除的模板
- 确认删除
注意:
- 删除操作不可恢复
- 只能删除自定义模板,不能删除内置模板
- 删除后缓存也会被清理
更新模板
Git 模板
Git 模板会自动检查更新:
- 创建项目时选择 Git 模板
- 扩展会检查远程仓库是否有更新
- 如果有更新,会提示是否拉取最新版本
- 确认后自动更新缓存
手动更新:
- 删除旧模板
- 重新添加(会拉取最新版本)
本地模板
本地模板实时使用,无需更新。修改本地目录后,下次创建项目时自动使用最新内容。
模板结构要求
必需文件
my-template/
├── lib/
│ └── main.dart # 必需
├── pubspec.yaml # 必需
└── README.md # 推荐推荐结构
my-template/
├── lib/
│ ├── main.dart
│ ├── core/ # 核心基础设施
│ ├── shared/ # 共享资源
│ └── features/ # 功能模块
├── test/ # 测试
├── assets/ # 资源文件
├── pubspec.yaml
├── .gitignore
├── analysis_options.yaml # 代码分析配置
└── README.md占位符
模板中可以使用以下占位符,创建项目时会自动替换:
| 占位符 | 说明 | 示例 |
|---|---|---|
| 项目名称 | my_app |
| 包名 | com.example.my_app |
| 项目描述 | A new Flutter project |
| 作者名称 | Your Name |
使用示例:
pubspec.yaml:
yaml
name: { { projectName } }
description: { { description } }
publish_to: 'none'
version: 1.0.0+1
environment:
sdk: '>=3.0.0 <4.0.0'
dependencies:
flutter:
sdk: flutterlib/main.dart:
dart
import 'package:flutter/material.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return MaterialApp(
title: '{{projectName}}',
home: const HomePage(),
);
}
}README.md:
markdown
# {{projectName}}
{{description}}
## Author
{{author}}模板最佳实践
1. 包含完整的项目结构
my-template/
├── lib/
│ ├── main.dart
│ ├── core/
│ │ ├── theme/
│ │ ├── router/
│ │ └── constants/
│ ├── shared/
│ │ ├── widgets/
│ │ └── utils/
│ └── features/
│ └── home/
├── test/
├── assets/
│ ├── images/
│ └── fonts/
├── pubspec.yaml
├── .gitignore
├── analysis_options.yaml
└── README.md2. 提供清晰的 README
markdown
# 项目模板
## 特性
- MVVM 架构
- 模块化设计
- 主题系统
- 路由管理
## 目录结构
\`\`\`
lib/
├── core/ # 核心基础设施
├── shared/ # 共享资源
└── features/ # 功能模块
\`\`\`
## 使用说明
1. 安装依赖:`flutter pub get`
2. 运行项目:`flutter run`
## 开发规范
- 使用 MVVM 架构
- 每个功能模块独立
- 遵循命名规范3. 配置代码分析
analysis_options.yaml:
yaml
include: package:flutter_lints/flutter.yaml
linter:
rules:
- prefer_const_constructors
- prefer_const_literals_to_create_immutables
- avoid_print
- prefer_single_quotes4. 提供示例代码
在模板中包含示例代码,帮助团队成员快速上手:
lib/features/home/
├── pages/
│ └── home_page.dart # 示例页面
├── viewmodels/
│ └── home_viewmodel.dart # 示例 ViewModel
└── widgets/
└── home_card.dart # 示例组件5. 包含常用依赖
pubspec.yaml:
yaml
dependencies:
flutter:
sdk: flutter
# 状态管理
provider: ^6.0.0
# 网络请求
http: ^1.1.0
dio: ^5.0.0
# 本地存储
shared_preferences: ^2.0.0
# 路由
go_router: ^12.0.0
# UI 组件
flutter_screenutil: ^5.9.0
dev_dependencies:
flutter_test:
sdk: flutter
flutter_lints: ^3.0.06. 配置 .gitignore
gitignore
# Miscellaneous
*.class
*.log
*.pyc
*.swp
.DS_Store
.atom/
.buildlog/
.history
.svn/
# IntelliJ related
*.iml
*.ipr
*.iws
.idea/
# Flutter/Dart/Pub related
**/doc/api/
.dart_tool/
.flutter-plugins
.flutter-plugins-dependencies
.packages
.pub-cache/
.pub/
build/
# Android related
**/android/**/gradle-wrapper.jar
**/android/.gradle
**/android/captures/
**/android/gradlew
**/android/gradlew.bat
**/android/local.properties
**/android/**/GeneratedPluginRegistrant.java
# iOS/XCode related
**/ios/**/*.mode1v3
**/ios/**/*.mode2v3
**/ios/**/*.moved-aside
**/ios/**/*.pbxuser
**/ios/**/*.perspectivev3
**/ios/**/*sync/
**/ios/**/.sconsign.dblite
**/ios/**/.tags*
**/ios/**/.vagrant/
**/ios/**/DerivedData/
**/ios/**/Icon?
**/ios/**/Pods/
**/ios/**/.symlinks/
**/ios/**/profile
**/ios/**/xcuserdata
**/ios/.generated/
**/ios/Flutter/App.framework
**/ios/Flutter/Flutter.framework
**/ios/Flutter/Flutter.podspec
**/ios/Flutter/Generated.xcconfig
**/ios/Flutter/app.flx
**/ios/Flutter/app.zip
**/ios/Flutter/flutter_assets/
**/ios/Flutter/flutter_export_environment.sh
**/ios/ServiceDefinitions.json
**/ios/Runner/GeneratedPluginRegistrant.*团队协作场景
场景 1:统一团队规范
- 创建团队标准模板仓库
- 包含团队的代码规范和最佳实践
- 团队成员添加该模板
- 所有新项目使用统一模板
场景 2:多项目类型
为不同类型的项目创建不同模板:
电商项目模板:包含商品、订单、支付等模块社交项目模板:包含用户、动态、聊天等模块工具类项目模板:简化的结构,快速开发
场景 3:版本管理
使用 Git 分支管理模板版本:
main分支:稳定版本dev分支:开发版本v1.0标签:历史版本
团队成员可以选择使用不同版本的模板。
私有仓库认证
HTTPS 认证
对于私有仓库,扩展会提示输入用户名和密码:
Git URL: https://git.company.com/team/template.git
Username: your-username
Password: your-passwordSSH 认证
推荐使用 SSH 密钥认证:
配置 SSH 密钥:
bashssh-keygen -t rsa -b 4096 -C "your_email@example.com"添加公钥到 Git 平台
使用 SSH URL:
git@git.company.com:team/template.git
常见问题
模板下载失败?
可能原因:
- 网络问题
- Git URL 错误
- 权限不足(私有仓库)
- Git 未安装
解决方案:
- 检查网络连接
- 验证 Git URL 是否正确
- 确认有仓库访问权限
- 安装 Git:
git --version
模板无效?
可能原因:
- 缺少必需文件(
pubspec.yaml、lib/main.dart) - 项目结构不正确
pubspec.yaml格式错误
解决方案:
- 检查模板结构
- 确保包含必需文件
- 验证
pubspec.yaml格式
如何共享模板?
方式 1:Git 仓库
- 将模板推送到 Git 仓库
- 分享 Git URL 给团队成员
- 团队成员添加该 URL
方式 2:本地共享
- 将模板目录复制到共享位置
- 团队成员添加本地路径
模板更新后如何同步?
Git 模板:
- 删除旧模板
- 重新添加(自动拉取最新版本)
本地模板: 自动使用最新内容,无需操作。