目錄

Dart 2 遷移指南

Dart 2 有一些與早期版本 Dart 不同的關鍵點。本文將會簡單地介紹這些差異並提供了一些將程式碼遷移到 Dart 2 的建議。

至於 為什麼 Dart 2 要做這些改變,你可以查閱 Dart 2 公告

差異點

Dart 語言、庫、編譯系統以及 Web 開發工具都已經有所變化。

語言和庫

工具

遷移你的程式碼

如何遷移你的程式碼取決於你的程式碼有多古老以及執行在什麼平台。有關如何遷移 Web 應用的幫助請查閱 [ Web 應用遷移指南][webdev dart2]。如果你遷移一個 Flutter 應用,請查閱 變革公告 如果你釋出了 package,則除了適配平台不同的特性之外,還需要遵循 下述的 package 遷移說明

通用流程

下面是遷移到 Dart 2 的一個流程概述。

  1. 獲取一個最新的 Flutter 或 Dart SDK 版本以及你所使用的 IDE 的最新外掛。

  2. 升級你應用依賴的 package。

  3. 執行 dart2_fix 工具,它可以幫助遷移一些過時的 Dart 1.x API 到 Dart 2。

  4. 執行分析器以找出 編譯時錯誤 以及棄用提示。

    • Flutter:flutter analyze 或使用 Android Studio/IntelliJ 或 VS Code 的問題檢視。

    • 伺服器端或 Web:[dart analyze][dartanalyzer]

  5. 修復程式碼問題並再次執行分析器,重複該操作直到你的程式碼透過靜態分析。

  6. 執行測試以找出 執行時錯誤

    • 執行你軟體所有的 [自動化測試]。

    • 執行手動測試以查詢控制檯錯誤。

    考慮新增自動化測試來捕獲你發現的問題。

  7. 修復問題知道你的程式碼可以正常執行。

  8. 可選的: 移除 new 以及不必要的 const 關鍵字。

    • 你可以手動地移除它們或者使用類似 dart format --fix 這樣的工具。

    • 為了找到 new 和不必要的 const 出現的地方,可以將 unnecessary_newunnecessary_const 規則新增至 分析選項檔案linter 部分。

遷移 package

作為一個 package 的擁有者,你需要遵循下列幾項:

  • 遵循你的 package 所支援的平台的遷移技巧(詳見 上述)。

  • 確保你的 package 通過了 Dart 2 分析(查閱上面的執行分析器)。

  • 確保你 package 的使用者知道如何上報問題。

  • 能夠對上報的問題快速地作出響應。

  • 如果程式碼的變更導致無法向後相容,請升級最低的 SDK 版本限制。

遷移 Web 應用

如果需要將你的 Web 應用更新到使用 Dart 2.x,你需要先更新一波 工具

你還要對 <script> 元素進行如下的改動,以更新編譯後的 Dart 程式碼參考:

  • 刪除 <script defer src="packages/browser/dart.js"></script>

  • <script defer src="foo.dart.js"></script> 替換
    <script defer src="foo.dart" type="application/dart"></script>

變化以及向後相容性

如果你必須更改 package 的程式碼,請 嘗試令其可以在 1.x 中使用,就像其在 Dart 2 中使用那樣。例如,你可能需要新增型別註解(或者如果一個已被移除的 API)去使用一個替代的 1.x API。

如果程式碼的變更導致無法向後相容,請升級最低的 SDK 限制

測試你程式碼的變更 以確保你的 package 在使用時可以如你所願地執行。

SDK 版本上限

一旦你的 package 通過了 Dart 2 分析,請更新版本上限以表明其支援相容到 Dart 2:

environment:
  # 只能在 Dart 2 中使用
  sdk: '>=2.0.0 <3.0.0'

如果你計劃保持與舊版 Dart 的相容性,請相應地調整 SDK 為較低的版本限制:

environment:
  # 可以在 Dart 1(1.20.1 開始)以及 Dart 2 中使用。
  sdk: '>=1.20.1 <3.0.0'

如果你使用 2.0 後引入的功能 請確保你指定了正確的 SDK 下限:

environment:
  # 可以在 2.1 中使用但不能在 2.0 中使用
  sdk: '>=2.1.0 <3.0.0'

更多資源