flutter安装及建立项目请前往官方文档:https://docs.flutter.cn/install/quick

flutter基础知识不做赘述,后续的开发使用到会做简单介绍。

从简单的项目结构开始,迭代,到完整结构。完美不是设计出来的,是迭代出来的。

一、官方核心原则(必须遵守)

  1. 关注点分离(Separation of Concerns):UI 层与数据层严格分离。
  2. MVVM 为主,Domain 层可选
    • UI 层:View + ViewModel
    • 数据层:Repository + Service
    • 领域层(可选):UseCase(复杂业务时加入)。
  3. 目录按功能分层,而非按类型:优先按业务模块划分,内部再按类型分组。

二、官方标准项目结构(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/(官方核心:按业务模块)

每个模块(如 authhome)独立,包含:

  • 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 官方更新)

  1. 新增 app/ 目录:统一管理全局主题、路由、常量,替代零散文件。
  2. features/ 替代 presentation/:官方强调按功能划分,而非按 UI 类型。
  3. domain/ 改为可选:简单项目无需,复杂业务才加入,避免过度设计。
  4. 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:统一管全局数据模型、仓库

✅ 好处:

  1. 改一处功能不会牵连整个项目
  2. 可以单独抽离某个模块做成插件
  3. 符合单一职责、开闭原则

三、极其适合团队协作、多人开发

  • 每个人负责一个 features 模块,代码互不冲突
  • 新建业务直接在 features 新建文件夹,不打乱原有目录
  • 新人看目录就能看懂项目业务有哪些,不用翻代码

✅ 好处:团队并行开发、减少 Git 冲突、上手成本极低


四、状态管理、路由、业务逻辑天然好适配

适配现在主流技术栈:

  • GoRouter 统一放 app/routes
  • Riverpod/GetX 逻辑统一放每个模块的 viewmodel
  • 网络请求、模型、仓库收敛在模块内部

不用到处散着写,架构统一规范,不用每个人自己乱写风格

✅ 好处:统一编码规范、方便封装全局路由拦截、状态监听、全局主题切换


五、极易维护、迭代、删模块、加模块

  1. 加新功能:直接在 features 新建一个文件夹,按固定模板写即可
  2. 删废弃功能:直接删掉整个模块文件夹,无残留、无依赖牵连
  3. 重构模块:只在当前模块内改,不影响其他业务

老式平铺结构,删一个页面要到处找关联代码,容易留垃圾代码、隐性 Bug。

✅ 好处:项目越做大,维护成本越低


六、完美支持多环境、大型商业项目

电商、社交、App Store 上架项目必备优势:

  • 全局主题、常量、路由统一在 app,方便做多主题、多配色、多渠道包
  • core 层统一封装网络、异常、弹窗,全局 UI 风格统一
  • 业务模块隔离,方便做模块化分包、插件化、后期微服务化

七、适配测试、自动化、代码生成

  • 每个模块独立,单元测试好写
  • json_serializable、build_runner 生成的模型收敛在模块内
  • 依赖注入 di 统一管理,方便 mock 数据做测试

八、面试 & 职场硬优势

这种 App + Core + Features 模块化架构是现在 大厂 Flutter 面试必问、企业级项目标配。你用这套结构,面试官一眼就知道:懂架构、懂分层、懂模块化,不是只会写页面的初级开发者


一句话总结核心好处

  1. 业务收拢:一个功能一个文件夹,好找好维护
  2. 分层解耦:改一处不崩全局
  3. 团队友好:多人开发不冲突,规范统一
  4. 易于扩展:加功能、删功能、重构都极简
  5. 官方标准:适配最新 Flutter 架构、路由、状态管理
  6. 工程化专业:企业级项目、上架项目首选结构
Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐