Dart 3.7 的发布带来了多项重要更新,旨在提升开发者的生产力。新引入的通配符变量 `_` 作为占位符,简化了参数命名,消除了名称冲突的可能性。此外,Dart 格式化工具(`dart format`)进行了重写,自动处理尾随逗号,使代码格式更加统一。分析器也增加了新的快速修复和 lint 规则,提升代码质量。 在 pub.dev 上,新增的下载统计功能允许包作者查看版本下载情况,同时推出了深色模式,改善夜间使用体验。此外,主题搜索的自动补全功能使用户更容易找到相关包。整体而言,Dart 3.7 通过这些更新,致力于提供更高效、便捷的开发体验。

Dart 3.7 发布

Dart 3.7

视频

前言

原文 Dart 3.7 发布

参考

https://medium.com/dartlang/announcing-dart-3-7-bf864a1b195c

正文

Dart 3.7 的发布带来了多项重要更新,旨在提升开发者的生产力。新引入的通配符变量 _ 作为占位符,简化了参数命名,消除了名称冲突的可能性。此外,Dart 格式化工具(dart format)进行了重写,自动处理尾随逗号,使代码格式更加统一。分析器也增加了新的快速修复和 lint 规则,提升代码质量。

在 pub.dev 上,新增的下载统计功能允许包作者查看版本下载情况,同时推出了深色模式,改善夜间使用体验。此外,主题搜索的自动补全功能使用户更容易找到相关包。整体而言,Dart 3.7 通过这些更新,致力于提供更高效、便捷的开发体验。

让我们来看看详细内容!

Announcing Dart 3.7

Macros update 宏更新

我们最近在问题跟踪器博客文章中发布了更新,声明我们将停止实验性宏功能的工作。我们要感谢社区对这一不幸结果的理解。

通过这一改变,团队重新获得了一些能力来投资于其他有价值的发展。我们已经在研究改进 build_runner 性能的方法,我们仍然预计会推出增强语言特性(可能形式略有不同),并且我们希望找到新的、更直接的方式来支持建模数据以及处理序列化和反序列化(例如,从和到 JSON)。

通配符变量语言特性

局部变量和参数名为 _ 现在是函数式语言中所称的“通配符”。这意味着名称是一个占位符,不会声明任何实际的变量。

目前在 Dart 中,如果回调体实际上不需要使用参数,则常用 _ 作为回调参数的名称,如下所示:

void announceCompletion(Future<void> future) {
  future.then((_) { // <--
    print('Complete!');
  });
}

但是,如果回调有多个你不需要使用的参数,你会给它们命名为 ______ 等,因为否则名称会冲突。现在,在 Dart 3.7 中,名为 _ 的参数和局部变量实际上不会创建变量,因此不存在名称冲突的可能性。你可以为多个参数使用 _ ,例如:

void announceFailure(Future<void> future) {
  future.onError((_, _) { // <--
    print('Error!');
  });
}

如果你有声明名为 _ 的参数或变量并在代码中使用它,那么该代码在 Dart 3.7 中将不再工作。例如:

var [1, 2, 3].map((_) {
  return _.toString();
  //     ^ Error! Reference to unknown variable.
});

在这种情况下,你必须重命名参数或局部变量。此语言更改仅适用于参数和局部变量(而非顶级变量或成员),因此你可以进行此重命名而不破坏库的公共 API。

通配符变量是一个使语言更加一致的小特性。名为 _ 的变量在模式中一直以这种方式行为:

var [_, _, third, _, _] = [1, 2, 3, 4, 5];
print(third); // Prints "3".

现在参数和局部变量以相同的方式行为。

Dart 格式化程序中的新格式样式

Dart 3.7 包含了一个重写的 Dart 格式化工具( dart format ),具有新的格式样式。新样式看起来类似于你在参数列表中添加尾随逗号时的样式,不同的是现在格式化工具会为你自动添加和删除这些逗号。例如:

// Old style:
void writeArgumentList(
    Token leftBracket, List<AstNode> elements, Token rightBracket) {
  writeList(
      leftBracket: leftBracket,
      elements,
      rightBracket: rightBracket,
      allowBlockArgument: true);
}

// New style:
void writeArgumentList(
  Token leftBracket,
  List<AstNode> elements,
  Token rightBracket,
) {
  writeList(
    leftBracket: leftBracket,
    elements,
    rightBracket: rightBracket,
    allowBlockArgument: true,
  );
}

这是对工具、其生成的输出以及行为的重大更改。为了使过渡尽可能平稳,您获得的格式样式取决于您要格式化的代码的语言版本。如果语言版本是 3.6 或更早,代码将使用旧样式进行格式化。如果是 3.7 或更高版本,则使用新样式。

当你通过提升软件开发套件约束来升级你的软件包以使用 Dart 3.7 时(并在运行 dart pub get !后),你将选择新的格式风格。

确定每个文件的语言版本, dart format 会查找 package_config.json 。这意味着你需要在格式化包中的代码之前运行 **dart pub get** 。如果你在持续集成服务器中有格式检查,请确保它也运行 dart pub get

我们并不打算无限期地支持这两种风格。在未来的某个时间点,当大多数生态系统都在使用 3.7 或更高版本时,对旧风格的支持将被移除。

新样式包括一些长期要求的功能:

  • 项目范围内的页面宽度配置。您现在可以在项目的 analysis_options.yaml 文件中配置首选的格式化页面宽度,如下所示:
    formatter:
      page_width: 123
  • 通过使用一对特殊的标记注释,可以将代码的一个区域排除在自动格式化之外:
    main() {
      // dart format off
      no   +   formatting     +     here;
      // dart format on
    }

有一个破坏性更改。格式化程序不再支持 dart format --fix 。相反,使用 dart fix 来应用 dart format 所能应用的所有修复,并且更多。

您可以在 CHANGELOG 和 FAQ 中找到更多详细信息。

Dart 分析器中的更新的快速修复和新 lint 规则

我们一直在积极改进 Dart 以提高开发人员的生产力,这意味着在 Dart 3.7 中通过新的 lint、快速修复和辅助功能来改进分析器。一个值得注意的添加是 unnecessary_underscores lint,它支持新的通配符变量功能。

Dart 3.7 包含的众多新快速修复和辅助功能中,包括修复常见问题,如缺失的 await 关键字、不正确的导入前缀以及违反类似 cascade_invocations 的 lint 规则。还有用于重构代码的实用辅助功能,例如将 else 块转换为 else if ,以及用 ExpandedFlexible 包装 Flutter 小部件。

你可以在完整的分析器更改列表中找到有关所有这些内容的更多详细信息。

在 Dart 网页平台上向前推进

一年前,我们引入了新的库和软件包,以便从 Dart 与 JavaScript 和浏览器 API 进行互操作。展望未来,主要的 JavaScript 库是 dart:js_interop 。对于浏览器 API,请使用 package:web

作为我们持续努力将 Dart 和 Flutter 生态系统迁移到与 WebAssembly 兼容的 API 的一部分,我们将在 Dart SDK 中弃用相关的旧版 API。在 Dart 3.7 版本中,有七个 Dart SDK 库被弃用:

  • dart:html
  • dart:indexed_db
  • dart:js
  • dart:js_util
  • dart:web_audio
  • dart:web_gl

我们计划在 2025 年底移除这些库。您可以在 JavaScript 互操作 dart:js_interop性页面了解它们的替代品。

pub.dev 包网站上的新生产力功能

12 月,我们在 pub.dev 上推出了软件包的下载统计。这些数据显示了每月下载量以及一个小图表,显示了随时间变化的每周下载量。

今天,我们扩展了这一功能,支持查看每个软件包版本的下载次数。现在可以了解有多少软件包使用者已升级到最新版本(或仅仅是最新主要版本)。这些见解旨在帮助软件包作者评估将修复回退到软件包较旧主要版本的价值。

img

每周下载量图表

img

每周下载量图表

深色模式适用于 pub.dev

pub.dev 的深色模式长期以来一直是一个受欢迎的请求,从今天起,现在可以将 pub.dev 切换为深色模式。此切换会影响 pub.dev 上托管的软件包页面和软件包 API 文档。

img

深色模式适用于 pub.dev

pub.dev 的主题

去年,我们在 pub.dev 上推出了对主题的支持。您可以将主题添加到您的 pubspec.yaml ,如果您看到应该合并的相关主题,可以通过拉取请求提出规范化建议。

浏览 pub.dev 的用户可以单击主题以浏览相关软件包。我们之前引入了在 pub.dev 上使用搜索关键字(如“topic:widget”)搜索主题的功能,但找到这些关键字并不总是很容易。因此,我们在 pub.dev 上推出了一种类似 IDE 的搜索关键字自动补全功能。您可以通过按 ctrl+space 触发它,或者在输入匹配前缀(如“topic:”或“license:”)时自动触发它。

img

主题搜索关键词

小结

Dart 3.7 通过一系列新特性和改进,致力于提升开发者的效率和体验。无论是通配符变量的引入还是新的格式化样式,这些变化都在朝着更高的生产力和更好的可读性方向发展。我们期待您在未来的开发中享受这些新功能!

感谢阅读本文

如果有什么建议,请在评论中让我知道。我很乐意改进。


猫哥 APP

flutter 学习路径


© 猫哥 ducafecat.com

end