项目模板
概述
我们提供四种项目模板(only/min/normal/pro),覆盖从极简原型到企业级应用的全场景需求。通过本指南您将了解:
- 各模板的核心差异
- 如何根据项目需求选择
- 典型项目结构示例
全面对比表
功能特性 | only | min | normal | pro |
---|---|---|---|---|
基础入口 (main.dart) | ✅ | ✅ | ✅ | ✅ |
标准项目结构 | ❌ | ✅ | ✅ | ✅ |
路由管理系统 | ❌ | ✅ | ✅ | ✅ |
主题管理系统 | ❌ | ✅ | ✅ | ✅ |
状态管理方案 | ❌ | ✅ | ✅ | ✅ |
开发工具集 | ❌ | ✅ | ✅ | ✅ |
UI组件库 | ❌ | ❌ | ✅ | ✅ |
网络请求框架 | ❌ | ❌ | ❌ | ✅ |
数据持久化 | ❌ | ❌ | ❌ | ✅ |
核心差异
- only:仅保留最小运行单元(适合验证核心功能)
- min:三大基石(路由/主题/状态管理)
- normal:增加 UI 组件库(提升开发效率)
- pro:完整解决方案(含网络层+数据持久化)
模板项目结构演进
从最小运行单元到企业级架构,四个模板层层递进,每个模板都基于前序模板扩展功能模块
1. 基础单元:only 模板
js
# 极简结构
lib/
└── main.dart // 主入口文件
适用边界
- 技术验证(Proof of Concept)
- 单文件组件测试
2. 架构基石:min 模板
在 only 模板基础上新增 8 个核心模块,构建完整应用骨架
js
.
├── common (公共模块)
├── config (配置模块)
├── init (初始化模块)
├── main.dart (主入口文件) // 继承自 only 模板
├── models (数据模型模块)
├── network (网络模块)
├── pages (页面模块)
├── tools (工具模块)
├── vm (视图模型模块)
└── widget (组件模块)
核心能力
- 提供通用项目架构
- 路由管理:支持多页面跳转
- 主题管理:暗黑模式适配
3. 效率增强:normal 模板
在 min 模板基础上新增 UI 组件库及工具类封装,提升开发效率
js
.
├── common/
│ ├── ...
│ ├── base_ui/ // UI组件基类
│ │ ├── base_normal_ui // 示例模块 基础普通UI基类
│ ├── constanst/
│ │ └── sp_id_constanst.dart // 示例模块 常量定义
│ ├── utils/
│ │ ├── ...
│ │ └── utils.dart // 示例模块 工具类
│ └── widgets/
│ ├── ...
│ ├── place_holder_widget.dart // 示例模块 占位组件
│ └── refresh_widgets.dart // 示例模块 刷新组件
├── config/
│ ├── data/
│ │ ├── ...
│ │ └── sp_config.dart // 示例模块 配置类
│ └── ...
├── init
├── main.dart
├── models
│ ├── ...
│ └── demo_item_model.dart // 示例模块 数据模型
├── network/
│ ├── apis/
│ │ ├── ...
│ │ └── demo_mock_apis.dart // 示例模块 模拟API接口
│ ├── index.dart
│ └── transformers
├── pages/
│ ├── ...
│ └── demo_list_v.dart // 示例模块 列表页
├── tools/
│ ├── ...
│ ├── scree_tool.dart // 示例模块 屏幕工具类
│ ├── shared_preferences_tool.dart // 示例模块 共享偏好工具类
├── vm/
│ ├── demo_list_vm.dart // 示例模块 列表页视图模型
│ └── demo_vm.dart // 示例模块 详情页视图模型
└── widget
增强特性
- 预置 UI 基类:提供通用base_ui和GetX base_ui两种方案
base_normal_ui
:基于Flutter原生状态管理的UI基类base_get_ui
:基于GetX状态管理的UI基类(在GetX分支中)
- 常用工具类封装:屏幕适配、本地存储等工具
- 完整MVVM示例:展示最佳实践的代码结构
- 统一缺省页面:加载、错误、空数据状态页面
💡 base_ui选择指南:新手推荐通用base_ui,GetX团队推荐GetX base_ui
4. 企业级方案:pro 模板
在 normal 模板基础上新增网络请求框架和数据持久化,支持复杂业务场景
js
.
├── common
│ ├── ...
│ └── base_ui\
│ ├── ...
│ └── base_get_ui // 基于GetX的UI基类
├── config
│ ├── ...
│ └── data\
│ │ ├── ...
│ │ └── http_normal_config.dart
├── eg_module // 示例模块
| ├── index.dart
| ├── models
| ├── network
| ├── pages
| ├── routers
| ├── tools
| ├── vm
| └── widgets
├── init
├── main.dart
├── models
├── network
├── pages
├── tools\
│ ├── ...
│ ├── dio_cache_tool.dart // Dio缓存工具类
│ ├── getx_tool.dart // GetX工具类
│ ├── path_provider_tool.dart // 路径提供工具类
│ └── request_tool.dart // 请求工具类
├── vm
└── widget
企业级特性
- 网络请求:封装拦截器、缓存、错误重试机制
- 数据持久化:支持本地存储方案
- 模块化设计:示例模块可直接复用
想了解更多项目结构区别,请查看项目结构。
选择决策树
决策说明
- 首先根据项目规模选择基础模板
- 再通过功能需求细化选择
- 企业级项目建议直接选用pro模板
典型应用场景
需求场景 | 推荐模板 | 选择理由 |
---|---|---|
学习 Flutter 基础 | only | 零干扰学习核心API |
开发个人工具 | min | 快速实现基础功能 |
企业级管理系统 | pro | 完整架构保障可维护性 |
中型商业应用 | normal | 平衡开发效率与功能完备性 |
注意事项
- 模板迁移成本:建议初期选择稍复杂的模板以预留扩展空间
- 技术栈匹配:根据团队熟悉度选择对应功能模块