跳到主要内容

dart fix

dart fix 命令查找并修复两种类型的问题

  • dart analyze 识别的、具有关联自动化修复(有时称为 快速修复代码操作)的分析问题。

  • 更新到较新版本的 Dart 和 Flutter SDK 时,过时的 API 用法。

应用修复

#

要预览建议的更改,请使用 --dry-run 标志

dart fix --dry-run

要应用建议的更改,请使用 --apply 标志

dart fix --apply

自定义行为

#

dart fix 命令仅在诊断标识出“问题”时应用修复。某些诊断(例如编译错误)是隐式启用的,而其他诊断(例如 lints)必须在分析选项文件中显式启用,因为个人偏好各不相同。

有时可以通过启用额外的 lints 来增加可应用的修复数量。请注意,并非所有诊断都具有关联的修复。

示例

#

假设你有这样的代码

dart
class Vector2d {
  final double x, y;
  Vector2d(this.x, this.y);
}

class Vector3d extends Vector2d {
  final double z;
  Vector3d(final double x, final double y, this.z) : super(x, y);
}

Dart 2.17 引入了一个称为 super initializers 的新语言特性,它允许你使用更紧凑的风格编写 Vector3d 的构造函数

dart
class Vector3d extends Vector2d {
  final double z;
  Vector3d(super.x, super.y, this.z);
}

要让 dart fix 将现有代码升级为使用此特性,并确保分析器在你日后忘记使用它时发出警告,请按如下配置你的 analysis_options.yaml 文件

yaml
linter:
  rules:
    - use_super_parameters

我们还需要确保代码启用了所需的语言版本。Super initializers 在 Dart 2.17 中引入,因此更新 pubspec.yaml 文件,使其 SDK 下限约束至少为该版本

yaml
environment:
  sdk: ">=2.17.0 <4.0.0"

然后,在查看建议的更改时,你应该会看到以下内容

dart fix --dry-run
Computing fixes in myapp (dry run)... 9.0s

1 proposed fixes in 1 files.

lib/myapp.dart
  use_super_parameters • 1 fix

要了解有关自定义分析结果和行为的更多信息,请参阅自定义静态分析

VS Code 支持

#

当你在 VS Code 中打开项目时,Dart 插件会扫描项目以查找 dart fix 可以修复的问题。如果找到可修复的问题,VS Code 会显示提示来提醒你。

VS Code notification about 'dart fix'

运行 dart pub getdart pub upgrade 后,如果包更改导致出现了 dart fix 可以修复的问题,VS Code 也可能显示此提示。

在运行 dart fix 之前保存所有文件。这确保 Dart 使用你文件的最新版本。