Flutter Dart开发规范

240 阅读4分钟

Flutter 开发规范包括 Dart 编码规范、项目结构规范、命名规范和代码风格等内容,确保团队协作时代码的一致性和可读性。以下是 Flutter/Dart 开发中的一些主要规范:

1. Dart 语言规范

1.1 命名规范

类名和枚举名:使用 PascalCase(首字母大写的驼峰格式),如 HomePage, UserModel。

变量名、方法名、参数名:使用 camelCase(首字母小写的驼峰格式),如 userName, fetchData()。

常量:使用全部大写加下划线,如 MAX_COUNT。

文件名:使用小写字母和下划线,如 home_page.dart, user_model.dart。

1.2 注释规范

单行注释:使用 // 注释单行。

文档注释:使用 ///,注释类、方法和属性,文档注释应描述其功能和参数。

/// This method fetches data from the server.

Future<void> fetchData() async {

  // implementation

}

多行注释:使用 /* ... */ 注释多行。

1.3 代码风格

使用 final const:能用 final 或 const 定义的变量不要用 var。

避免使用 var:若变量类型明确,直接使用具体类型定义。

简洁代码:方法和类保持简洁,方法长度不宜过长,可分拆为多个小方法。

空安全:优先使用空安全类型定义,避免出现空指针异常。

1.4 空安全操作

• ? (空安全访问) :在可能为 null 的对象后使用 ? 操作符。

• ?? (空合并操作符) :用于设置默认值,如 value ?? 'default'。

• ??=:用于仅在变量为 null 时赋值,如 name ??= 'Guest'。

2. 项目结构规范

2.1 项目目录结构

常见 Flutter 项目结构如下:

lib/
├── main.dart              # 入口文件
├── app/                   # 应用程序核心文件
│   ├── routes.dart        # 路由文件
│   ├── bindings.dart      # 依赖绑定
├── ui/                    # UI 层
│   ├── screens/           # 页面
│   └── widgets/           # 公共组件
├── models/                # 数据模型
├── controllers/           # 控制器
├── services/              # 服务类
├── utils/                 # 工具类
└── themes/                # 主题相关文件

2.2 页面文件结构****

每个页面组件的目录建议包括 view, controller, binding,便于管理页面逻辑和视图。例如,home 页面结构如下:

lib/ui/screens/home/
├── home_view.dart         # 视图
├── home_controller.dart   # 控制器
└── home_binding.dart      # 绑定

2.3 组件化开发

通用组件:将可复用的 UI 组件放在 widgets 目录下,便于在不同页面中调用。 • 模块化开发:按模块划分业务逻辑,每个模块包含自己的视图、控制器、模型和服务。

3. 代码规范

3.1 状态管理规范

选择状态管理工具:尽量统一使用一种状态管理工具,如 Provider, GetX, Riverpod 等。

使用 Get.put() Get.find()(如果使用 GetX),避免在页面中直接创建控制器实例。

3.2 异步编程

使用 async / await:尽量使用 async/await 处理异步代码,避免回调地狱。

捕获异常:对异步方法使用 try-catch 进行异常捕获,保证应用稳定性。

3.3 函数和方法

短小精悍:方法最好不要超过 20 行,保持代码简洁清晰。

参数个数:方法参数不宜过多,若参数较多,考虑封装为对象。

3.4 数据模型

使用 model 目录:将所有的数据模型类放在 models 目录下,便于管理。

序列化:使用 fromJson 和 toJson 方法进行数据转换,配合 json_serializable 等插件生成数据模型。

3.5 样式和主题

主题管理:将应用的主题放在 themes 目录下,方便管理。

使用常量:如颜色、字体大小等可以在 constants 文件中定义为常量,避免在代码中出现硬编码的数值。

4. 命名约定

UI组件命名:命名尽量体现用途,如 LoginButton, ProfileAvatar。

控制器命名:以 Controller 结尾,如 LoginController, HomeController。

模型命名:数据模型类以 Model 结尾,如 UserModel, ProductModel。

5. 注释和文档

注释规范:保持简洁明了,方法、类和关键逻辑处都要有注释。

文档注释:公共方法、类和 API 应包含文档注释,解释其用途和用法。

6. Lint 规则和代码检查

建议在项目中使用 flutter_lints 插件,并根据团队需求自定义 analysis_options.yaml:

# 在 pubspec.yaml 中添加依赖
dev_dependencies:
  flutter_lints: ^2.0.0
  
# 创建 analysis_options.yaml 配置代码检查规则
include: package:flutter_lints/flutter.yaml

linter:
  rules:
    always_specify_types: true  # 强制指定类型
    avoid_print: true  # 避免使用 print
    prefer_const_constructors: true  # 优先使用 const 构造函数

7. Git 提交规范

单一功能提交:每次提交应尽量只包含一个功能或一个 Bug 修复。

提交信息:建议使用清晰的提交信息,如 feat: 增加用户登录功能,或 fix: 修复登录崩溃问题。

分支命名:采用简洁的分支命名方式,如 feature/login, bugfix/home_crash。

示例提交信息格式

feat: 新增订单页面

fix: 修复订单页面的显示问题

refactor: 重构订单页面的状态管理逻辑

总结

在 Flutter 和 Dart 开发中,良好的开发规范不仅提升了代码的可读性,还能提高项目的可维护性。