必须安装官方dart-code.dart-code插件并重启vscode,确保状态栏显示dart标识;启用editor.formatonsave且设置editor.defaultformatter为dart-code.dart-code;格式化由sdk的dartfmt执行,不可自定义规则。

装 Dart-Code 插件是硬前提,不是“装了就行”
VSCode 原生不支持 Dart 格式化,必须安装官方 Dart-Code.dart-code 插件(publisher 是 Dart-Code),别选名字相近的旧版 Dart 或单独的 Flutter 插件。装完必须重启 VSCode —— 否则 editor.formatOnSave 很可能静默失效。
验证是否生效:打开任意 .dart 文件,看状态栏右下角是否显示 Dart 或 Flutter;右键菜单里有没有 Format Document 选项。没有?基本就是插件没加载成功。
formatOnSave 和 defaultFormatter 必须同时配对
只开 editor.formatOnSave 不起作用,它只是开关;真正干活的是 editor.defaultFormatter 是否指向 Dart 插件。两者缺一不可。
- 在设置中搜
formatOnSave,勾选它(全局或工作区均可) - 再搜
defaultFormatter,点开下拉菜单,选Dart-Code.dart-code - 如果项目根目录有
.vscode/settings.json,检查里面有没有写死别的 formatter,比如"editor.defaultFormatter": "esbenp.prettier-vscode"—— 这会直接覆盖 Dart 格式化
格式化行为由 dartfmt 决定,不是 VSCode 自己排的
VSCode 的 Dart 插件调用的是 SDK 自带的 dart format 命令行工具,所以效果和你在终端执行 dart format . 完全一致。这意味着:
- 不支持自定义缩进空格数、括号换行风格等 ——
dartfmt是 opinionated,没配置项 - 如果某行被强行拆成多行,不是 VSCode 设置错了,而是
dartfmt规则如此 - 确保
dart命令可用:在 VSCode 内置终端运行dart --version,无输出就去配置dart.sdkPath
常见“没反应”的真实原因不是插件坏了
最常遇到“保存后代码没变”,大概率是下面某个环节断了:
-
dart命令不可用:终端运行dart --version报错或无输出 - 文件没被识别为 Dart:后缀是
.dart,但状态栏右下角语言模式显示的不是Dart(可点击手动切换) -
editor.formatOnSaveMode被设为modifications:这个模式只格式化编辑过的行,容易误判为失效,建议保持默认file - 项目里有
analysis_options.yaml且exclude:匹配了当前文件:格式化会被跳过
整个链路是:VSCode → Dart 插件 → dart CLI → dartfmt。任一环出问题,格式化就卡住,但错误往往不报——得逐段查。











