exception-coder

dart-coding-standards

Use when writing, reviewing, or modifying Dart or Flutter code. Covers Dart-specific naming, dartdoc, formatting, null safety, and language conventions.

exception-coder 6 1 Updated 1mo ago
GitHub

Install

npx skillscat add exception-coder/team-standards/dart-coding-standards

Install via the SkillsCat registry.

SKILL.md

Dart 编码规范(Effective Dart·Dart 专属强制项)

本文件只写 Dart 独占条款。 命名表意、函数原子、层次分明、零魔法值、注释三档(含 §5.1.5 字段档、§5.2.1 职责边界注释)、异常不静默、删冗余 这 7 条通用铁律 + 注释红线(§5.4 / §5.4.1)在 coding-standards-common/SKILL.md 中,Dart 编码同时遵守通用 skill + 本文件。

触发顺序:coding-standards-common(通用 7 条 + 注释三档)→ dart-coding-standards(本文件 Dart 独占)→(仅 korepos / korepos-refund backend 代码)korepos-backend-service。


1. 文档注释 = dartdoc ///,不是 //

注释三档铁律(类 1-3 行 / 方法 1-2 行 / 核心块 1 行 / 字段一行可选)和注释红线见 coding-standards-common §5。以下为 Dart 独占语法:

  • 类 / 公开方法 / 公开字段的文档注释一律用 ///(dartdoc),不用 //。// 只用于函数体内的 §5.3 核心块行内注释
  • 首句是一句完整的摘要,以句号结尾、独占一行——dartdoc 工具把首句单独抽出来做摘要。后面要展开再空一行写
  • 引用其它标识符用方括号 [identifier](如 [OrderState.paid] / [refund]),dartdoc 会自动生成跳转链接,比裸文本更准
  • 文档注释写在注解之上(/// 在 @override / @JsonSerializable 等注解的上方)
/// 退款服务:发起退款与查询退款状态。
///
/// 现金支付直接进终态;在线支付([PaymentChannel.kpayOnline])须等异步回调。
class RefundService {
  /// 是否正在执行反结账流程。
  final bool reopenInProgress;
}

2. 不用 Javadoc 风格的 @param / @return / @throws

  • Dart 不用 @param / @return / @throws 标签(那是 Javadoc 风格)。参数 / 返回值 / 异常用散文 + [参数名] 引用自然带过
  • 平凡参数不逐个解释;只写非显然的约束(空值规则、取值范围、单位)
/// 发起退款申请,返回退款流水号。
///
/// [amount] 退款金额,单位分,不能超过原单可退余额。
/// 在线支付下返回的流水号需再轮询 [queryRefundStatus] 确认终态。
Future<String> refund(String orderId, int amount) async {}

3. 私有成员(_ 前缀)的文档注释从简

  • 私有方法 / 私有字段(_ 前缀)不是公开 API,1 行 /// 讲当前职责即可,禁堆契约演变史(同 §5.4 私有方法 dartdoc 红线)
  • 公开 API(无 _)才需要完整的散文契约说明

4. Flutter Widget 注释写「展示什么 / 何时变化」

  • Widget 类的 /// 讲它在 UI 上展示什么、关键状态如何影响展示,不讲 build 实现细节
  • StatelessWidget / StatefulWidget 的回调字段(onPressed 等)一行 /// 说明触发时机
/// 订单退款状态条:处理中显示加载动画,完成后显示退款金额。
class RefundStatusBar extends StatelessWidget {
  /// 点击「重试」时回调;为 null 时隐藏重试按钮。
  final VoidCallback? onRetry;
}

5. TODO 格式(对齐 §5.3 / §5.4)

  • // TODO(负责人): 原因——负责人 + 原因必填、禁带日期(同 coding-standards-common §5.4)
  • FIXME 同理。能开任务的优先开任务,不把 TODO 长期留源码
// TODO(zhangkai): 等多次部分退款上线后支持金额累加

6. 金额禁用 double

  • 金额 / 数量等需要精确计算的值禁用 double(浮点精度问题),用 int(单位分)或 Decimal;项目若需要更严格的架构扫描,应在项目内声明并执行

违规示例快查

错误写法 正确写法
// 退款服务 作类文档注释 /// 退款服务:发起退款与查询状态。(用 ///)
/// @param orderId 订单ID /// [orderId] 原订单号。(Dart 用 [] 引用,不用 @param)
私有方法 _validateAmount 上 10 行 dartdoc 讲契约演变 1 行 /// 校验退款额不超原单余额。(私有不堆契约史)
字段注释 // amount: 金额(复述字段名) /// 退款金额,单位分。(讲业务含义 + 单位,省略自解释字段)
// TODO(zhangkai 2026-04): 优化 // TODO(zhangkai): 等接口对齐后优化(去日期)
金额用 double price int priceInCents 或 Decimal price
// 这是个退款 Widget /// 订单退款状态条:...展示什么、何时变化。

Categories