Use when writing, reviewing, or modifying Dart or Flutter code. Covers Dart-specific naming, dartdoc, formatting, null safety, and language conventions.
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 |
/// 订单退款状态条:...展示什么、何时变化。 |