Dart 2.16 現已發布
文 / Michael Thomsen, Dart 產品經理
Dart 2.16 正式發布
Dart 2.16 正式版已于上周發布。盡管沒有新的語言特性加入,但本次版本發布包含了數個問題修復 (包括對安全漏洞的修復),發布 Dart package 的時候也可以指定支持的平臺,pub.dev 網站也更新了全新的搜索界面。

與 Flutter 2.10 一同發布的 Dart 2.16,仍然在將舊的命令行工具遷移到新的 dart 命令行工具。這個版本中,dartdoc和 dartanalyzer 已被棄用,分別對應新的命令是 dart doc 和 dart analyze。dartdoc、dartanalyzer 和 pub 這三個命令計劃在 Dart 2.17 中徹底移除。
| 歷史命令 | 替代的 dart 命令 | 棄用版本 | 停用版本 |
|---|---|---|---|
| stagehand | dart create | 2.14 | 2.14 |
| dartfmt | dart format | 2.14 | 2.15 |
| dart2native | dart compile exe | 2.14 | 2.15 |
| dart2js | dart compile js | 2.17 | 2.18 |
| dartdevc | none | 2.17 | 2.18 |
| dartanalyzer | dart analyze | 2.16 | 2.17 |
| package:analyzer_cli | dart analyze | 2.16 | 2.17 |
| dartdoc | dart doc | 2.16 | 2.17 |
| pub | dart pub | 2.15 | 2.17 |
查看所有計劃棄用的命令的更多說明,請參考 Dart SDK 倉庫的 Issue #46100。
Dart 2.16 也包含了一個安全漏洞的修復,以及兩個破壞性改動:
dart:io中的 HttpClient API 現在可以設置authroization、www-authenticate、cookie和cookie2這些請求頭信息。在 Dart 2.16 之前,SDK 中重定向邏輯的實現有一個漏洞,當跨域重定向發生時,這些請求頭 (可能包含敏感信息) 會被發送,在 Dart 2.16 中這些請求頭已被移除,你可以閱讀 CVE-2022–0451 了解更多細節。dart:io中的Directory.renameAPI 調整了在 Windows 平臺上的行為:與目標名稱一致的目錄不會被刪除 (issue #47653)。- 在 Dart 1.x 中遺留的
Platform.packageRoot和Isolate.packageRoot已被移除 (issue #47769),它們在 Dart 2.x 中不起作用。
想要了解更多關于 Dart 2.16 的改動,可以查閱 更新日志。
在 pub.dev 上聲明 package 支持的平臺
Dart 的設計思想包含了可移植性,因此我們會盡量讓代碼能夠在更多平臺上運行。然而,開發者們偶爾可能會在 pub.dev 上創建或分享僅為一個或幾個平臺設計的 package。你可能有一個依賴于特定操作系統上 API 的 package,或者它使用了像 dart:ffi 這類只能在 native 平臺而不能在 Web 平臺上使用的庫等。
在 Dart 2.16 版本中,你可以在 pubspec 手動聲明 package 支持的平臺。例如,如果你的 package 只支持 Windows 和 macOS,那么就可以在 pubspec.yaml 這樣聲明:
name: mypackage
version: 1.0.0
platforms:
windows:
macos:
dependencies:
當你正在開發一個 Dart package,而它支持的平臺與 pub.dev 自動識別的不同時,可以在新的 platforms 標簽處手動聲明。如果你正在開發和分享包含特定平臺代碼的 Flutter 插件 (例如,Kotlin 或 Swift),Flutter plugin 標簽 可以指定支持的平臺。
pub.dev 新的搜索體驗
響應開發者的請求,我們對于在 pub.dev 上的搜索提供了更好的支持。此次更改的主要目的是幫助你區分和搜索支持的平臺。以下是新的搜索界面預覽:

新的搜索界面在左側有一個搜索篩選欄,你可以用它限制搜索范圍:
- Platforms (平臺): 選擇一個或多個平臺,搜索結果僅會包含支持所選平臺的 package;
- SDKs: 選擇 Dart 或 Flutter 將結果限制為支持 Dart SDK 或 Flutter SDK 的 package;
- Advanced (高級選項): 額外的搜索選項,例如篩選出被標記為 Flutter Favorite 的 packages。
空安全進展
從一年前我們在 Dart 2.12 中正式發布了健全的空安全開始,社區以及 Dart 生態向空安全遷移的速度令人震撼:截止到上周,排名前 250 的 package 已經 100% 支持了空安全,排名前 1000 的 pacakge 也已經有 96% 的比例支持了空安全!謝謝所有為空安全貢獻的 package 作者們!
應用遷移到空安全的遷移進度也十分樂觀,這里指應用以及其所有的依賴都支持空安全。根據我們的統計,71% 的 Flutter tool 都運行在健全的空安全模式下了,如果你還沒有開始,現在已經可以行動啦!
即將到來的內容
我們希望 pub.dev 的搜索界面更新對你有幫助,同時歡迎隨時 提出反饋。2022 年二季度我們計劃發布下一個 Dart SDK 版本,并且,我們還在跟進一些 令人興奮的語言特性,希望能在今年晚些時候發布。
致謝
- 原文: Dart 2.16: Improved tooling and platform handling
- 鏈接: https://medium.com/dartlang/dart-2-16-improved-tooling-and-platform-handling-dd87abd6bad1
- 翻譯 / 審校: CFUG 團隊 Alex、加康、迷鹿
- 制圖: Lynn
浙公網安備 33010602011771號