【文章翻譯】Announcing Dart 3.10

【文章內容使用 Gemini 2.5 Flash 自動翻譯產生】

宣布 Dart 3.10

今天,我們很高興地宣布 Dart 3.10 發布!

宣布 Dart 3.10

此版本持續專注於改進核心開發者體驗。新的 點語法縮寫 (**) ** 功能將幫助您編寫更具可讀性且不那麼冗長的程式碼。我們還引入了一個功能強大的新 分析器外掛系統,允許您建立直接整合到 IDE 中的自訂靜態分析規則。我們很高興地宣布 構建鉤子 現在已經穩定!

此版本還為 pub.dev 和套件管理帶來了多項改進。您將在個人資料的 「喜歡」選項卡 中找到新的搜尋功能,套件作者現在可以 禁用手動發布 以提高安全性。最後,我們新增了一套新的、更具體的 棄用註釋,讓您可以更精細地控制 API 的演進。

繼續閱讀以了解有關這些以及 Dart 3.10 中其他改進的更多資訊。

語言更新

點語法縮寫 🆕

Dart 3.10 引入了 點語法縮寫 (.). 這個新功能讓您可以省略冗餘的類別或枚舉名稱,因為編譯器可以從語境中推斷類型。

讓我們來看一個常見的場景:日誌記錄。以前,您可能已經寫過:

1
2
3
4
5
6
7
8
enum LogLevel { info, warning, error, debug }

void logMessage(String message, {LogLevel level = LogLevel.info}) {
// ... implementation
}

// Somewhere else in your app
logMessage('Failed to connect to database', level: LogLevel.error);

由於 level 參數已經預期 LogLevel,重複枚舉名稱是沒有必要的。使用點語法縮寫,您現在可以這樣寫:

1
2
3
4
5
6
7
8
enum LogLevel { info, warning, error, debug }

void logMessage(String message, {LogLevel level = .info}) {
// ... implementation
}

// Somewhere else in your app
logMessage('Failed to connect to database', level: .error);

程式碼現在專注於「值」(.error),而不是「類型」(LogLevel)。

點語法縮寫不僅適用於枚舉。您還可以將它們用於構造函數、靜態方法和靜態字段。要了解更多資訊,請閱讀我們的 點語法縮寫 指南。

工具更新

分析器外掛 🆕

您是否曾經在審查程式碼時想過,「分析器應該能夠捕捉到這個錯誤吧?」現在它可以了。

Dart 3.10 引入了一個功能強大的 Dart 分析器新外掛系統。這允許您編寫和使用自己的靜態分析規則,這些規則直接整合到 IDE 和命令行工具中,例如 dart analyzeflutter analyze。您可以使用 分析器外掛 來:

  • 強制執行專案特定的規則,例如專門的 lint 和警告,以維護團隊程式碼庫中的約定。
  • 避免您領域中常見的陷阱和最佳實踐。
  • 透過提供快速修復和協助來自動化程式碼更改,以幫助自動糾正問題或遷移到新的 API。

這個新系統是為實現一個豐富的社區驅動工具生態系統而進行的重大架構努力的結果,我們特別感謝社區貢獻者 Felipe Morschel 對分析器的一般性寶貴修復和功能。

要使用分析器外掛,只需將其添加到您的 analysis_options.yaml 文件中:

1
2
3
4
analyzer:
plugins:
- some_plugin
- another_plugin

要了解有關建立自己的自訂規則的更多資訊,請參閱 編寫分析器外掛 的文件。

構建鉤子 🚀

將原生程式碼(如 C++、Rust 或 Swift)整合到 Dart 套件中通常需要管理複雜的、平台特定的構建文件,如 CMake 或 Gradle。在 Dart 3.10 中,這個過程現在大大簡化了。

我們很高興地宣布 構建鉤子 (以前稱為原生資產) 現在已經穩定。您可以使用這些鉤子來編譯原生程式碼或下載原生資產(如動態庫),並將它們直接與您的 Dart 套件捆綁在一起。這個強大的功能讓您可以在套件中重用現有的原生程式碼或函式庫,並消除了為不同作業系統編寫單獨構建文件(如 SPM、Gradle 或 CMake)的需要。

要了解更多資訊,請參閱 編寫構建鉤子 的文件,或觀看有關構建鉤子的 Flutter Build 節目片段

移除棄用 lint 🆕

當您發布套件的新主要版本(例如 1.0.0 或 0.2.0)時,最佳做法是移除您之前標記為棄用的任何 API。這會使您的套件保持乾淨,並防止開發人員使用過時的程式碼。但是,在發布過程中很容易忘記此步驟。

為了提供幫助,我們引入了一個新的 lint:remove_deprecations_in_breaking_versions。當套件的版本更新到新的主要破壞性版本時,此 lint 會檢測剩餘的棄用元素。透過標記這些情況,lint 有助於確保您的套件 API 保持現代化,並讓您的使用者易於理解。

remove_deprecations_in_breaking_versions lint 範例

@Deprecated 註解 ⬆️

現有的 @Deprecated 註解是一個粗略的工具。它通知開發人員不再推薦使用 API,但它不允許細微的差別。例如,您如何表示一個類別不應再擴展,但仍然可以實例化?

為了讓套件作者對其 API 的演進有更精確的控制,Dart 3.10 引入了一套新的、更具體的棄用註解。

您現在可以棄用類別和 mixins 的特定使用案例:

此外,您現在可以使用 @Deprecated.optional() 表示可選參數在未來版本中將成為必需參數。

Pub 更新

搜尋、排序和取消喜歡您最愛的套件 🆕

在 pub.dev 上管理您最愛的套件剛剛獲得了重大升級。您可以透過搜尋功能或個人資料上的 「喜歡」選項卡 來完成此操作,您現在可以使用與常規搜尋相同的熟悉控制項來搜尋、排序和篩選您喜歡的套件。這包括按喜歡數、pub 點數和熱門程度排序。我們還改進了取消喜歡套件的 UI,讓您比以往更輕鬆地保持喜歡的套件列表整潔和最新。

在您的「喜歡」選項卡中搜尋、排序和取消喜歡您最愛的套件

如果您選擇使用搜尋功能搜尋您喜歡的套件,只需將 is:liked-by-me 加入到您的查詢中。

搜尋,但只包含您喜歡的套件

啟用或禁用手動發布 🆕

為了增強安全性和防止意外發布,您現在可以禁用套件的手動發布(pub publish)。這對於具有自動發布工作流程或不再積極發布的套件來說是理想的選擇。

透過禁用手動發布,您可以防止使用個人憑證更新套件,從而降低未經授權或意外發布的風險。

您可以在套件的「管理」選項卡中使用「啟用手動發布」核取方塊來控制此功能。

在「管理」選項卡中啟用或禁用手動發布

總結

Dart 3.10 版本帶來了一系列改進,重點關注開發人員生產力、工具以及套件生態系統的整體健康狀況。從使程式碼更簡潔的點語法縮寫等語言功能,到分析器外掛和穩定的構建鉤子等強大的新工具功能,我們希望此版本能讓您能夠構建出更好的應用程式。

我們非常感謝為此版本做出貢獻的許多工程師和團隊,特別感謝我們的社群貢獻者,他們幫助 Dart 變得更好。

我們很高興看到您使用 Dart 3.10 構建什麼。要開始使用,您今天就可以獲取 Dart 3.10 SDK。有關所有新功能和更新功能的完整列表,請查看 Dart SDK 變更日誌


宣布 Dart 3.10 最初發佈於 Dart 的 Medium 上,人們在那裡透過突出顯示和回應這個故事來繼續討論。