Dart 2.16 現已釋出

Flutter發表於2022-02-13

文 / Michael Thomsen, Dart 產品經理

Dart 2.16 正式釋出

Dart 2.16 正式版已於上週釋出。儘管沒有新的語言特性加入,但本次版本釋出包含了數個問題修復 (包括對安全漏洞的修復),釋出 Dart package 的時候也可以指定支援的平臺,pub.dev 網站也更新了全新的搜尋介面。

Flutter 2.10 一同釋出的 Dart 2.16,仍然在將舊的命令列工具遷移到新的 dart 命令列工具。這個版本中,dartdocdartanalyzer 已被棄用,分別對應新的命令是 dart docdart analyzedartdocdartanalyzerpub 這三個命令計劃在 Dart 2.17 中徹底移除。

歷史命令替代的 dart 命令棄用版本停用版本
stagehanddart create2.142.14
dartfmtdart format2.142.15
dart2nativedart compile exe2.142.15
dart2jsdart compile js2.172.18
dartdevcnone2.172.18
dartanalyzerdart analyze2.162.17
package:analyzer_clidart analyze2.162.17
dartdocdart doc2.162.17
pubdart pub2.152.17

檢視所有計劃棄用的命令的更多說明,請參考 Dart SDK 倉庫的 Issue #46100

Dart 2.16 也包含了一個安全漏洞的修復,以及兩個破壞性改動:

  • dart:io 中的 HttpClient API 現在可以設定 authroizationwww-authenticatecookiecookie2這些請求頭資訊。在 Dart 2.16 之前,SDK 中重定向邏輯的實現有一個漏洞,當跨域重定向發生時,這些請求頭 (可能包含敏感資訊) 會被髮送,在 Dart 2.16 中這些請求頭已被移除,你可以閱讀 CVE-2022–0451 瞭解更多細節。
  • dart:io中的 Directory.rename API 調整了在 Windows 平臺上的行為:與目標名稱一致的目錄不會被刪除 (issue #47653)。
  • 在 Dart 1.x 中遺留的 Platform.packageRootIsolate.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 上的搜尋提供了更好的支援。此次更改的主要目的是幫助你區分和搜尋支援的平臺。以下是新的搜尋介面預覽:

Pub.dev 的搜尋介面,側邊欄包含 Platforms、SDKs 和高階選項

新的搜尋介面在左側有一個搜尋篩選欄,你可以用它限制搜尋範圍:

  • 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 版本,並且,我們還在跟進一些 令人興奮的語言特性,希望能在今年晚些時候釋出。

致謝

相關文章