当前位置: 首页 > ds >正文

flutter 项目工程文件夹组织结构

常见的 Flutter 项目文件夹结构:

1. 按 功能模块页面(Screen)

这种结构按功能模块或页面来组织,每个页面和相关的业务逻辑都放在单独的文件夹中。适合大中型项目,可以清晰地分离每个页面或功能模块。

lib/├── main.dart├── screens/                # 页面文件夹│   ├── home/│   │   ├── home_screen.dart│   │   ├── home_viewmodel.dart│   │   └── home_widget.dart│   ├── profile/│   │   ├── profile_screen.dart│   │   └── profile_viewmodel.dart│   └── settings/│       ├── settings_screen.dart│       └── settings_viewmodel.dart├── widgets/                # 通用组件│   ├── custom_button.dart│   └── custom_card.dart├── models/                 # 数据模型│   ├── user.dart│   └── product.dart├── services/               # 数据服务(如 API 请求)│   └── api_service.dart└── utils/                  # 工具类├── date_utils.dart└── string_utils.dart

优点:

  • 每个页面的代码(包括视图、状态管理、组件等)都放在一起,易于管理。

  • 适用于 大型项目,当每个页面或者功能模块的复杂度较高时,这种结构能有效地管理业务逻辑。

缺点:

  • 如果项目较小或者页面较简单,文件夹结构可能会过于复杂。

2. 按 组件类型

这种结构将项目按组件类型来组织,例如将页面(Page)、视图(View)、小部件(Widget)分开,适用于有很多复用组件的小型或中型项目。

lib/├── main.dart├── pages/                  # 页面文件夹│   ├── home_page.dart│   ├── profile_page.dart│   └── settings_page.dart├── widgets/                # 可复用的 UI 组件│   ├── custom_button.dart│   ├── custom_card.dart│   └── avatar_widget.dart├── models/                 # 数据模型│   ├── user.dart│   └── product.dart├── services/               # 数据服务│   └── api_service.dart└── utils/                  # 工具类├── date_utils.dart└── string_utils.dart

优点:

  • 页面和组件分离,页面专注于布局和逻辑,组件专注于 UI。

  • 适用于 中小型项目,复用性较高,组件化开发。

缺点:

  • 如果组件很多,可能会导致项目目录膨胀,查找文件时会变得困难。

3. 按 层级结构

这种方式将项目按 功能层级 来分,通常适用于有使用 MVVMBLoC 状态管理的项目。例如,视图(UI)、模型(数据)、视图模型(状态管理)等都分开。

 
lib/├── main.dart├── features/                # 功能模块│   ├── home/                # Home 功能模块│   │   ├── ui/              # UI 层│   │   │   └── home_screen.dart│   │   ├── models/          # 数据模型│   │   │   └── home_model.dart│   │   └── viewmodels/      # 视图模型│   │       └── home_viewmodel.dart│   └── profile/             # Profile 功能模块├── common/                  # 公共组件│   ├── widgets/             # 通用组件│   └── services/            # 服务,如 API 调用├── models/                  # 通用数据模型└── utils/                   # 工具类

优点:

  • 各层职责明确,解耦度高,易于维护。

  • 适合 复杂项目,尤其是使用 MVVM 或类似架构时,代码分层更为清晰。

缺点:

  • 对于小项目来说,可能会显得结构过于复杂。


📝 总结:如何选择文件夹组织方式

  1. 按页面(Screen)分

    • 适合 中大型项目,每个页面或模块较为独立,易于管理。

    • 页面较复杂时,所有相关逻辑(视图、状态、组件等)都可以放在一个文件夹中。

  2. 按组件类型分

    • 适合 中小型项目,且有较多可复用组件时。

    • 页面和 UI 组件分离,便于复用和测试。

  3. 按层级结构分

    • 适合 复杂项目,有多个功能模块且涉及状态管理(MVVM、BLoC等)时。

    • 功能和责任划分更清晰,易于协作和维护。

项目结构方案结构说明优点缺点适用场景
方案1:按页面分组
/pages/home_page.dart
/pages/login_page.dart
所有页面集中放在 pages/ 文件夹中,逻辑分散- 简单易上手
- 适合新手和小项目
- 页面耦合严重
- 缺乏模块边界
- 难扩展和维护
小型项目、原型开发
方案2:按功能模块分组(推荐)
/features/home/
/features/login/
每个功能模块独立一个文件夹,内部包含 UI、逻辑、子组件等- 模块独立、结构清晰
- 易维护、扩展性强
- 符合 Flutter 的组件化理念
- 初期可能稍繁琐
- 不适合强共享逻辑时
中大型项目、团队协作项目、推荐使用
方案3:按层分组(MVVM/BLoC)
/views/ /viewmodels/ /models/
所有页面、逻辑、模型分别集中在不同层级目录- 解耦性强
- 易于测试和复用
- 适合严格架构项目
- 初学者难上手
- 页面与逻辑分离不直观
- 增加开发复杂度
大型项目、企业项目、有架构规范的团队
http://www.xdnf.cn/news/5519.html

相关文章:

  • 新手在使用宝塔Linux部署前后端分离项目时可能会出现的问题以及解决方案
  • Linux-TCP套接字编程简易实践:实现EchoServer与远程命令执行及自定义协议(反)序列化
  • 【JavaWeb+后端常用部件】
  • Day 5:Warp高级定制与自动化
  • 足式机器人的全身模型预测控制
  • 常用设计模式
  • 一种混沌驱动的后门攻击检测指标
  • GC垃圾回收
  • vector的大小
  • Java开发经验——阿里巴巴编码规范经验总结2
  • (2025)图文解锁RAG从原理到代码实操,代码保证可运行
  • 自学嵌入式 day 17- c语言-第11章 结构体与共用体 第12章 位运算
  • 深入浅出之STL源码分析5_类模版实例化与特化
  • RAG与语义搜索:让大模型成为测试工程师的智能助手
  • DVWA靶场Cryptography模块medium不看原码做法
  • Python时间模块
  • MySQL 从入门到精通(二):DML 数据操作与 DQL 数据查询详解
  • Python项目75:PyInstaller+Tkinter+subprocess打包工具1.0(安排 !!)
  • 阿里云OSS-服务端加签直传说明/示例(SpringBoot)
  • Python数据分析案例75——基于图神经网络的交通路段流量时间序列预测
  • navicat 如何导出数据库表 的这些信息 字段名 类型 描述
  • fota移植包合入后编译验证提示:File verification failed
  • Java线程池深度解析:从使用到原理全面掌握
  • KTOR for windows:無文件落地HTTP服务扫描工具
  • 【Bootstrap V4系列】学习入门教程之 组件-表单(Forms)高级用法(二)
  • 教育行业的 RAG 落地:个性化学习助手设计
  • 【Linux基础】网络相关命令
  • Client 和 Server 的关系理解
  • Yocto项目实战经验总结:从入门到高级的全面概览
  • 大模型Embedding模型介绍与使用