1.flutter项目结构以及这样的好处
·
flutter安装及建立项目请前往官方文档:https://docs.flutter.cn/install/quick
flutter基础知识不做赘述,后续的开发使用到会做简单介绍。
从简单的项目结构开始,迭代,到完整结构。完美不是设计出来的,是迭代出来的。
一、官方核心原则(必须遵守)
- 关注点分离(Separation of Concerns):UI 层与数据层严格分离。
- MVVM 为主,Domain 层可选:
- UI 层:View + ViewModel
- 数据层:Repository + Service
- 领域层(可选):UseCase(复杂业务时加入)。
- 目录按功能分层,而非按类型:优先按业务模块划分,内部再按类型分组。
二、官方标准项目结构(2026 最新)
1. 完整结构(中大型项目,官方推荐)
lib/
├── main.dart # 入口:初始化App、路由、全局状态
├── app/ # 应用全局配置(官方推荐统一前缀)
│ ├── theme/ # 主题:颜色、字体、样式
│ ├── routes/ # 路由:GoRouter配置、路由名称
│ └── constants/ # 全局常量:字符串、尺寸、枚举
├── core/ # 核心基础(无业务,全项目复用)
│ ├── utils/ # 工具:日期、格式化、权限、设备
│ ├── network/ # 网络:Dio封装、拦截器、错误处理
│ ├── error/ # 异常:自定义异常、失败状态
│ └── widgets/ # 核心组件:按钮、输入框、加载、弹窗
├── features/ # 业务模块(官方推荐按功能划分,核心)
│ ├── auth/ # 登录/注册模块(示例)
│ │ ├── view/ # UI层:页面、私有组件
│ │ │ ├── login_page.dart
│ │ │ └── widgets/
│ │ ├── viewmodel/ # 状态层:状态管理(Provider/Riverpod)
│ │ │ └── login_viewmodel.dart
│ │ ├── domain/ # 领域层(可选):实体、用例
│ │ │ ├── entities/
│ │ │ └── usecases/
│ │ └── data/ # 数据层:仓库、数据源、模型
│ │ ├── repositories/
│ │ ├── datasources/
│ │ └── models/
│ └── home/ # 首页模块(同auth结构)
├── data/ # 全局数据层(跨模块复用)
│ ├── repositories/ # 全局仓库(如用户、设置)
│ ├── datasources/ # 全局数据源(API、本地存储)
│ └── models/ # 全局数据模型
└── di/ # 依赖注入(GetIt)
└── locator.dart
2. 极简版(小型项目,官方认可)
lib/
├── main.dart # 🔥 项目唯一入口(启动App、初始化全局服务)
├── app/ # 🎯 全局应用配置(所有页面共用的设置)
│ ├── theme.dart # 主题配置:颜色、字体、亮/暗色模式
│ └── router.dart # 路由配置:页面跳转规则、路由表
├── core/ # 🧩 公共核心工具(全项目复用,无业务逻辑)
│ ├── utils.dart # 工具类:时间格式化、字符串处理、设备信息
│ └── widgets/ # 全局公共组件:按钮、加载框、输入框、弹窗
├── features/ # 📦 业务模块(按功能划分,官方核心推荐)
│ ├── home/ # 首页功能模块
│ │ ├── home_page.dart # 首页UI页面
│ │ └── home_controller.dart # 首页逻辑/状态管理
│ └── login/ # 登录功能模块(结构和首页完全一致)
│ ├── login_page.dart
│ └── login_controller.dart
└── data/ # 📊 数据层(所有数据相关统一存放)
├── models/ # 数据模型:用户、商品、Json转Dart实体类
└── api.dart # 网络请求:接口调用、Dio封装
三、逐文件夹权威说明(官方定义)
1. main.dart
- 唯一入口:只做初始化,不写业务 / UIFlutter。
- 职责:
runApp()、全局主题、路由绑定、依赖注入初始化。
2. app/(官方推荐全局配置)
theme/:ThemeData、亮色 / 暗色主题、字体样式。routes/:GoRouter 配置、路由路径常量、路由跳转扩展。constants/:全局字符串、颜色常量、尺寸常量、枚举。
3. core/(无业务,全项目复用)
utils/:日期格式化、字符串处理、权限请求、设备信息。network/:Dio 实例、拦截器(请求 / 响应)、网络错误处理。error/:自定义异常类、Failure模型、错误提示工具。widgets/:全局复用组件(按钮、输入框、加载、弹窗、空状态)。
4. features/(官方核心:按业务模块)
每个模块(如 auth、home)独立,包含:
view/(UI 层):页面(xxx_page.dart)、模块内私有组件(widgets/)。viewmodel/(状态层):状态管理(Riverpod/Provider)、UI 状态、事件处理。domain/(可选领域层):entities/:纯 Dart 业务实体(无序列化)。usecases/:单一业务逻辑(如LoginUseCase)。
data/(数据层):repositories/:仓库实现(调用数据源)。datasources/:远程 API、本地数据库(Hive/Isar)。models/:数据模型(含fromJson/toJson)。
5. data/(全局数据层)
- 跨模块复用的仓库、数据源、模型(如用户信息、设置)。
6. di/(依赖注入)
locator.dart:注册仓库、用例、视图模型、网络服务。
四、与旧结构的关键差异(2026 官方更新)
- 新增
app/目录:统一管理全局主题、路由、常量,替代零散文件。 features/替代presentation/:官方强调按功能划分,而非按 UI 类型。domain/改为可选:简单项目无需,复杂业务才加入,避免过度设计。core/仅放无业务代码:与features严格隔离,提升复用性。
五、总结
2026 Flutter 官方推荐结构核心:
- 分层清晰:UI → ViewModel → Domain(可选)→ Repository → Service。
- 功能优先:
features/为核心,每个模块独立完整。 - 配置集中:
app/统一管理全局主题、路由、常量。 - 极简灵活:小型项目可省略
domain/,大型项目可扩展。
Flutter 官方「app/core/features」项目结构核心好处(高级开发视角,讲透底层逻辑)
我从官方设计初衷、团队协作、维护迭代、架构解耦、适配业务、面试加分、后期重构7 个维度给你讲清楚,都是企业级项目真实落地的价值,不是空理论。
一、遵循 Flutter 官方最新架构思想:按业务模块划分,而非按文件类型划分
老式结构:pages/ widgets/ models/ 平铺顶层
- 找一个登录功能:要分别去 pages、widgets、models、network 四个文件夹翻
- 新人上手一脸懵
现在 features/xxx 一个模块全包:登录、首页、个人中心各自封闭在自己文件夹里一个业务 = 一个文件夹,所有页面、状态、模型、仓库全在一起。
✅ 好处:业务高度内聚,找代码一秒定位
二、彻底解耦:分层隔离,职责单一
结构分层:app 全局配置core 通用底层能力(无业务)features 各业务模块互相隔离data 全局公共数据
每一层只做自己的事:
- app:只管主题、路由、全局常量
- core:只给全项目提供工具、网络、异常、公共组件,不碰任何业务
- features:各业务互不侵入,改登录不影响首页
- data:统一管全局数据模型、仓库
✅ 好处:
- 改一处功能不会牵连整个项目
- 可以单独抽离某个模块做成插件
- 符合单一职责、开闭原则
三、极其适合团队协作、多人开发
- 每个人负责一个
features模块,代码互不冲突 - 新建业务直接在 features 新建文件夹,不打乱原有目录
- 新人看目录就能看懂项目业务有哪些,不用翻代码
✅ 好处:团队并行开发、减少 Git 冲突、上手成本极低
四、状态管理、路由、业务逻辑天然好适配
适配现在主流技术栈:
- GoRouter 统一放
app/routes - Riverpod/GetX 逻辑统一放每个模块的
viewmodel - 网络请求、模型、仓库收敛在模块内部
不用到处散着写,架构统一规范,不用每个人自己乱写风格。
✅ 好处:统一编码规范、方便封装全局路由拦截、状态监听、全局主题切换
五、极易维护、迭代、删模块、加模块
- 加新功能:直接在 features 新建一个文件夹,按固定模板写即可
- 删废弃功能:直接删掉整个模块文件夹,无残留、无依赖牵连
- 重构模块:只在当前模块内改,不影响其他业务
老式平铺结构,删一个页面要到处找关联代码,容易留垃圾代码、隐性 Bug。
✅ 好处:项目越做大,维护成本越低
六、完美支持多环境、大型商业项目
电商、社交、App Store 上架项目必备优势:
- 全局主题、常量、路由统一在
app,方便做多主题、多配色、多渠道包 - core 层统一封装网络、异常、弹窗,全局 UI 风格统一
- 业务模块隔离,方便做模块化分包、插件化、后期微服务化
七、适配测试、自动化、代码生成
- 每个模块独立,单元测试好写
- json_serializable、build_runner 生成的模型收敛在模块内
- 依赖注入 di 统一管理,方便 mock 数据做测试
八、面试 & 职场硬优势
这种 App + Core + Features 模块化架构是现在 大厂 Flutter 面试必问、企业级项目标配。你用这套结构,面试官一眼就知道:懂架构、懂分层、懂模块化,不是只会写页面的初级开发者。
一句话总结核心好处
- 业务收拢:一个功能一个文件夹,好找好维护
- 分层解耦:改一处不崩全局
- 团队友好:多人开发不冲突,规范统一
- 易于扩展:加功能、删功能、重构都极简
- 官方标准:适配最新 Flutter 架构、路由、状态管理
- 工程化专业:企业级项目、上架项目首选结构
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)