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

Flutter 项目命名规范 提升开发效率

一份完整的 Flutter 项目命名规范文档(包含文件、类名、控件、资源、方法等),再配上 示例文档


📖 Flutter 项目命名规范文档

总体原则:由大到小

命名遵循 “由大到小” 的规则,从大范围到小范围依次命名,保证统一性和层级感。

  • 项目级:全局通用前缀(如 App / Global
  • 模块级:功能域(如 Video / User / Comment
  • 类级:控件 / 业务逻辑类(如 VideoPlayerWidget / UserProfileModel
  • 方法级:行为动作(如 buildCommentItem / fetchUserData
  • 变量级:具体对象或状态(如 videoController / userList
  • 资源级:图片 / 字体 / json 等(如 ic_video_play.png / img_user_avatar.png

一、目录 & 文件命名

  • 全部小写,单词以下划线分隔(snake_case)
  • 按业务模块建立文件夹

✅ 正确:

lib/├── pages/│    ├── short_video/│    │     ├── short_video_page.dart│    │     ├── short_video_controller.dart│    │     └── short_video_widget.dart│    └── user_profile/│          ├── user_profile_page.dart│          └── user_profile_controller.dart

❌ 错误:

ShortVideoPage.dart
UserprofilePage.dart

二、类命名

  • 类、枚举、扩展:大驼峰 (PascalCase)
  • Widget 类Widget 结尾
  • 页面类Page 结尾
  • 控制器类Controller 结尾
  • 工具类UtilsHelper 结尾

✅ 正确:

class ShortVideoPage extends StatefulWidget {}class CommentListWidget extends StatelessWidget {}class VideoPlayerController {}class StringUtils {}

三、方法与变量命名

  • 方法 / 函数 / 变量:小驼峰 (camelCase)
  • 私有变量:加 _ 前缀
  • 常量:全大写 + 下划线

✅ 正确:

final int videoCount = 0;
final String videoTitle = "标题";const int MAX_VIDEO_COUNT = 99;void loadVideoList() {}
void _fetchUserData() {}

四、资源命名(图片 / 图标)

🔑 命名规则

[前缀]_[业务模块/对象]_[状态/尺寸]

🖼 图片资源命名前缀规范(Flutter 项目)

前缀含义示例
ic_icon 图标(功能、按钮、Tab 等)ic_home_normal.png, ic_video_play.png
bg_背景图(页面、弹窗、模块背景)bg_login.png, bg_profile_header.jpg
btn_按钮图(有状态的按钮资源)btn_submit_normal.png, btn_play_pressed.png
img_普通图片(插画、展示图、banner)img_banner_spring.png, img_empty_state.png
avatar_头像(用户头像、默认头像)avatar_user_default.png
logo_Logo(App/品牌 logo)logo_app.png, logo_company.png
divider_分割线/装饰线divider_horizontal.png, divider_vertical.png
placeholder_占位图(加载中、空数据、错误)placeholder_article.png, placeholder_avatar.png
anim_动效/动画文件(Lottie/json/svg)anim_loading.json, anim_success.json
flag_国旗/标志图flag_china.png, flag_usa.png
tab_Tab 图标(专用场景,可选)tab_home_selected.png, tab_user_normal.png
badge_角标/小红点badge_vip.png, badge_new.png
iconfont_字体图标资源(如果用 iconfont)iconfont_music.ttf

  • 前缀:见上表
  • 业务模块/对象:如 homevideouser
  • 状态normalselecteddisabledpressedactive
  • 尺寸(可选):smalllarge2x3x

📌 示例

  • 首页 Tab 图标(默认):ic_home_normal.png
  • 首页 Tab 图标(选中):ic_home_selected.png
  • 视频播放按钮(按下):btn_play_pressed.png
  • 登录页顶部背景图:bg_login_top.jpg
  • 用户默认头像:avatar_user_default.png
  • 活动横幅(春季):img_banner_spring.png
  • 加载动画:anim_loading.json
  • 分割线:divider_horizontal.png
  • 占位图:placeholder_article.png

五、控件命名

  • 局部方法构建控件buildXxxWidget
  • 通用复用 WidgetXxxWidget 类单独抽取

✅ 示例:

Widget buildVideoDescriptionWidget(String title, String desc, List<String> tags) {return Column(crossAxisAlignment: CrossAxisAlignment.start,children: [Text(title, style: TextStyle(fontSize: 16, fontWeight: FontWeight.bold)),SizedBox(height: 8),Text(desc, maxLines: 2, overflow: TextOverflow.ellipsis),Wrap(spacing: 6,children: tags.map((e) => Chip(label: Text(e))).toList(),)],);
}

六、🎯 图片/控件状态命名表

英文中文用途示例
normal正常默认状态,例如按钮默认图标
selected选中收藏、Tab 选中
disabled禁用按钮不可点击
pressed按下点击时的状态
hover悬停Web/桌面鼠标移入
focused聚焦输入框/可聚焦控件
active激活正在使用的功能(如麦克风开关)
inactive非激活功能关闭/未启用
checked已勾选复选框/开关选中
unchecked未勾选复选框/开关未选
expanded展开折叠面板展开状态
collapsed收起折叠面板收起状态
success成功请求成功提示
error错误失败状态,加载失败图
warning警告风险/异常提醒
info信息普通提示状态
loading加载中请求、异步任务进行中
empty空状态列表无数据时
placeholder占位加载前的占位图
highlight高亮强调/提示某元素
hidden隐藏不可见但保留占位

👉 这样整理下来,你的 Flutter 项目在团队协作里会非常清晰、统一。

http://www.dtcms.com/a/351564.html

相关文章:

  • 深度学习(三):PyTorch 损失函数:按任务分类的实用指南
  • Swift 解法详解 LeetCode 363:矩形区域不超过 K 的最大数值和
  • Unity游戏打包——Mac基本环境杂记
  • Android Glide生命周期管理:实现原理与最佳实践
  • ubuntu2204安装搜狗拼音输入法
  • 基于spark的招聘岗位需求分析可视化系统设计与实现
  • 《相关法律、法规知识(五)》
  • 【数据结构】串——模式匹配
  • 微服务-23.网关登录校验-自定义GlobalFilter
  • yggjs_rbutton React按钮组件v1.0.0 示例和教程
  • Java全栈开发面试实录:从基础到实战的深度探索
  • JVM 学习与提升路线总结:从入门到精通的系统化指南
  • 前端-如何将前端页面输出为PDF并打包的压缩包中
  • PDF转图片、图片转PDF(免费)
  • AI+drawio生成流程图探索
  • Python 操作 PPT 文件:从新手到高手的实战指南
  • 重构审计体验!批量生成报表项目底稿的凭证检查表
  • 计算机术语 / 数学术语中的 trivial 与 non-trivial
  • MD5校验算法
  • Node.js(3)—— fs模块
  • Docker:部署Java后端
  • 关于电脑连接手机热点没有网络的问题
  • 每日一题DEEP_ML-卡方分布(Chi-Squared Distribution)
  • 数据结构初阶:详解单链表(一)
  • Linux->多线程3
  • Ubuntu操作系统下MySQL、MongoDB、Redis
  • 如何拯救一家濒临破产的科技公司?
  • C++工程实战入门笔记5-函数(二)
  • React前端开发_Day1
  • 迅为R3588S开发板ADB使用手册-运行shell