动态

详情 返回 返回

Dart 3.7 發佈 - 动态 详情

Dart 3.7 發佈

Dart 3.7

視頻

https://youtu.be/B5dJnXMKGAM

https://www.bilibili.com/video/BV1kpAnebEYA/

前言

原文 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

  • SaaS Fast
  • Flutter GetX Generator

flutter 學習路徑

  • Flutter 優秀插件推薦
  • Flutter 基礎篇1 - Dart 語言學習
  • Flutter 基礎篇2 - 快速上手
  • Flutter 實戰1 - Getx Woo 電商APP
  • Flutter 實戰2 - 上架指南 Apple Store、Google Play
  • Flutter 基礎篇3 - 仿微信朋友圈
  • Flutter 實戰3 - 騰訊即時通訊 第一篇
  • Flutter 實戰4 - 騰訊即時通訊 第二篇

© 貓哥
ducafecat.com

end

user avatar hubert-style 头像 hhsk 头像 dunizb 头像 xiangzhihong 头像 jingmingdewudongmian_dscnyw 头像 shu_5b5b4cde7027a 头像
点赞 6 用户, 点赞了这篇动态!
点赞

Add a new 评论

Some HTML is okay.