目錄

重大變更和棄用

此頁面列出 Dart 中所有語言和函式庫的重大變更和棄用,依版本和區域整理,以協助 Dart 使用者了解並管理其影響。完整的版本說明可在 Dart SDK 變更日誌 中取得。重大變更政策 文件說明 Dart 中重大變更和棄用的政策和程序。

此頁面包含下列類型的重大變更:

  • 未設定版本:Dart SDK 不維護向後相容性,如果程式碼依賴於先前的行為,則在您 升級 SDK 版本 後,程式碼可能會中斷。

    這些是大多數變更,且未在此清單中特別標示。

  • 語言版本:Dart SDK 維護現有程式碼的向後相容性,且行為變更僅在您升級程式碼的 語言版本 時才會生效(可能會中斷依賴於先前行為的程式碼)。

    這些標示為「語言版本.

  • 棄用:Dart SDK 維護已棄用程式碼的相容性,並顯示警告。然後,棄用會在後續版本中完全移除,中斷任何依賴於先前行為的程式碼。

    這些分別標示為「已棄用」和「已移除.

  • 實驗性質:是版本的一部分,但尚未在 SDK 中視為穩定,且可能在不同版本間中斷。實驗性質的變更不一定有對應的重大變更問題,但可能在 SDK 變更日誌 中有更詳細的說明。

    這些標示為「實驗性質」,可能與其他變更類型結合使用.

如果您對任何這些重大變更有任何疑問或疑慮,請在相關項目連結的重大變更問題中留言。如需接收未來重大變更通知,請加入 Dart 宣布 群組。

3.4.0

#

暫定
預計以下變更將包含在 3.4.0 穩定版本中,但最終清單可能會在屆時之前變更。為降低這些變更的潛在影響,請考慮在 3.4.0 版本發布前考量這些變更。

語言

#

函式庫

#

dart:cli

#

dart:htmldart:indexed:dbdart:svgdart:web_audodart:web_gl

#
  • 這些函式庫現已標記為舊版,未來將減少支援。新專案應優先使用 package:webdart:js_interop

dart:js

#
  • 此函式庫現已標記為舊版,未來將減少支援。應將使用方式移轉至 dart:js_interopdart:js_interop_unsafe。如需深入了解,請查看 /go/next-gen-js-interop

dart:js_util

#
  • 此函式庫現已標記為舊版,未來將減少支援。應將使用方式移轉至 dart:js_interopdart:js_interop_unsafe。如需深入了解,請查看 /go/next-gen-js-interop

dart:typed_data

#

工具

#

生產用 JavaScript 編譯器 (dart2js)

#
  • 實驗性 已棄用:現在您應為 --dump-info CLI 選項指定格式,格式為 binaryjsonjson 格式已棄用,並可能在未來的 Dart 版本中移除。

Wasm 編譯器 (dart2wasm)

#
  • 實驗性:已更新、移除或取代各種 dart compile wasm CLI 參數。如需深入了解,請執行 dart compile wasm --verbose --help

3.3.0

#

SDK

#
  • 實驗性 已移除:以下實驗現已停用,因為它們已在 Dart 3 中發布,且在語言版本為 3.0 或更高版本時不再需要。應從分析選項、CLI 命令和 IDE 設定中移除其設定。

    • patterns
    • records
    • class-modifers
    • sealed-class

語言

#

函式庫

#

dart:cli

#
  • 實驗性 已棄用waitFor 函數 在另一個版本中仍然已棄用,並設定在 Dart 3.4 中移除。

dart:ffi

#

dart:html

#
  • 現在建議使用 package:http,而非直接使用 HttpRequest

dart:io

#
  • 現在建議使用 package:http,而非直接使用 HttpClient

dart:js_interop

#
  • 實驗性JSAny 等 JS 類型具有 新的編譯器特定表示類型
  • 實驗性:使用者定義的 @staticInterop 類別 不再能實作 JSAnyJSObject。應將用法移轉至 JSObject.fromInteropObject 或定義為擴充類型。
  • 實驗性JSArrayJSPromise 現在具有泛型參數。
  • 實驗性:已移動或重新命名各種擴充成員。如需了解更新的擴充,請參閱 JSAnyUtilityExtensionJSAnyOperatorExtension

dart:typed_data

#

dart:nativewrappers

#

工具

#

生產用 JavaScript 編譯器 (dart2js)

#

Wasm 編譯器 (dart2wasm)

#

分析器

#
  • 實驗性:分析器現在會回報無效的 dart doc 註解指令。

  • 由於 類型提升的改善,以下分析器診斷可能會觸發先前通過分析的現有程式碼

    • unnecessary_non_null_assertion
    • unnecessary_cast
    • invalid_null_aware_operator

程式碼檢查器

#
  • 已移除 iterable_contains_unrelated_typelist_remove_unrelated_type 程式碼檢查。請考慮移轉至已擴充的 collection_methods_unrelated_type 程式碼檢查。

  • 由於健全的 Null 安全性不再需要,因此已移除下列程式碼檢查。您應該從 analysis_options.yaml 檔案和任何忽略註解中移除其設定。

    • always_require_non_null_named_parameters
    • avoid_returning_null
    • avoid_returning_null_for_future

3.2.0

#

語言

#

函式庫

#

dart:cli

#

dart:convert

#

dart:developer

#
  • 已棄用Service.getIsolateID 方法。

dart:ffi

#

dart:io

#

dart:js_interop

#
  • 實驗性 已移除JSNumber.toDart,改用 toDartDoubletoDartInt
  • 實驗性 已移除Object.toJS,改用 Object.toJSBox.
  • 實驗性:已使用 dart:js_interop 將外部 JS 互操作 API 限制為一組允許的類型。
  • 實驗性:已禁止在 dart2wasm 上使用 isNullisUndefined
  • 實驗性:已變更 typeofEqualsinstanceof API,兩者都傳回布林值,而不是 JSBoolean。此外,typeofEquals 現在接受 String,而不是 JSString
  • 實驗性:已變更 JSAnyJSObject 類型,現在只能由使用者 @staticInterop 類型實作,無法延伸。
  • 實驗性:已變更 JSArray.withLength,現在接受 int,而不是 JSNumber

工具

#

開發用 JavaScript 編譯器 (DDC)

#

生產用 JavaScript 編譯器 (dart2js)

#

分析器

#

3.1.0

#

函式庫

#

dart:async

#

dart:io

#

dart:js_interop

#
  • 實驗性 已移除ObjectLiteral;使用 {}.jsify() 建立沒有命名成員的物件文字。

package:js

#
  • external @staticInterop 成員和 external 延伸成員不再能用作拆離。宣告一個呼叫這些成員的封閉或非 external 方法,並改用該方法。
  • external @staticInterop 成員和 external 延伸成員會為具有選用參數的方法產生略有不同的 JS 程式碼。

3.0.0

#

語言

#

函式庫

#
  • 下列現有類別已變成混合類別:IterableIterableMixinIterableBaseListMixinSetMixinMapMixinLinkedListEntryStringConversionSink

dart:core

#

dart:async

#

dart:collection

#

dart:developer

#

dart:ffi

#
  • 實驗性 已棄用@FfiNative 註解現已棄用。應更新用法以使用 @Native 註解。

dart:html

#

dart:math

#
  • 語言版本Random 介面只能實作,不能延伸。

dart:io

#

2.19.0

#

語言

#

函式庫

#

dart:convert

#

dart:developer

#

dart:ffi

#

dart:io

#

dart:isolate

#
  • 已將 SendPort.send 還原為嚴格檢查訊息內容,在傳送訊息給未知是否共用相同程式碼的 Isolate 時。

dart:mirrors

#

package:js

#

dart2js

#

2.18.0

#

語言

#

函式庫

#

dart:io

#

工具

#

Dart 命令列

#

2.17.0

#

函式庫

#

dart:io

#

工具

#

Dart 命令列

#

2.16.0

#

函式庫

#

dart:io

#

dart:isolate

#

工具

#

Dart 命令列

#

2.15.0

#

函式庫

#

dart:io

#

dart:web_sql

#

dart:html

#

工具

#

Dart 命令列

#

Dart VM

#

2.14.0

#

函式庫

#

dart:io

#
  • HttpClient 中的 setter 回呼函式 .authenticate.authenticateProxy 現在必須接受一個可為空的 realm 參數(適用於已進行 null 安全性遷移的程式碼)。

dart:typed_data

#

工具

#

Dart VM

#

Dart 命令列

#

dart2js

#

Dart Dev Compiler (DDC)

#

2.13.0

#

函式庫

#

package:js

#
  • 不再有效在非匿名 JS 互操作類別的 @JS() 註解中使用與 @Native 註解相符的 String

2.12.0

#

語言

#
  • Null 安全 現在在所有未選擇停用的程式碼中預設啟用。
  • 修正實作錯誤,其中 this 有時會在擴充中進行類型提升。

函式庫

#

dart:ffi

#

工具

#

Dart VM

#

Pub

#

2.10.0

#

工具

#

Dart VM

#

2.9.0

#

函式庫

#

dart:convert

#

dart:html

#
  • CssClassSet.add()CssClassSet.toggle 現在傳回 false,而不是 null,如果 CssClassSet 對應到多個元素。

dart:mirrors

#

工具

#

Dart VM

#

2.8.1

#

語言

#
  • 修正實作錯誤,其中區域變數推論會不正確地使用類型變數的提升類型。
  • 修正實作錯誤,自 Dart 2.0.0 起,包含 implements Functionextends Functionwith Function 的子句不再有效果。

函式庫

#

dart:async

#

dart:core

#

dart:ffi

#
  • 已將 Pointer.asFunction()DynamicLibrary.lookupFunction() 變更為擴充方法。

dart:io

#

工具

#

Dart Dev Compiler (DDC)

#

我們已修正 DDC 和 Dart2JS 之間的幾個不一致之處,讓使用者較少遇到一個編譯器接受但另一個編譯器會失敗的程式碼。

  • 已刪除 DDC 的舊版 (基於分析器) 版本。
  • 使用建議的 package:js interop 規格傳遞給 JavaScript 的函式現在必須以呼叫 allowInterop 包覆。
  • @JS() 類別中的建構函式必須標記為 external

dart2js

#
  • 對應的類型參數界限現在只需要是互為子類別,而非在重新命名界限類型變數和等同所有頂層類型後結構上相等。
  • 類型現在 已正規化
  • @JS() 類別中的建構函式必須標記為 external
  • 完全移除在 Dart 2.0.0 中隱藏且已停用的 --package-root 旗標。

2.7.1

#

2.7.0

#

語言

#

函式庫

#

dart:io

#
  • 新增 IOOverrides.serverSocketBind,以協助撰寫要模擬 ServerSocket.bind 的測試。

2.6.0

#

語言

#

函式庫

#

dart:ffi

#
  • API 現在使用靜態擴充方法成員。
  • 已移除記憶體管理 Pointer.allocatePointer.free
  • 已移除 Pointer.offsetBy,請改用 castelementAt

2.5.0

#

函式庫

#

dart:io

#

工具

#

Pub

#

2.4.0

#

語言

#

函式庫

#

dart:isolate

#
  • 使用 dart2js 或 DDC 編譯時,Isolate.resolvePackageUri 將永遠擲回 UnsupportedError

dart:async

#

2.2.0

#

函式庫

#

package:kernel

#
  • Kernel AST API 中 InstanceConstant 類別的 klass getter 已重新命名為 classNode 以保持一致性。
  • 已更新 Link 實作,以在 Windows 上使用真正的符號連結,而不是連接點。

2.1.1

#

函式庫

#

dart:io

#

工具

#

Dart VM

#

2.1.0

#

語言

#

工具

#

dart2js

#
  • 常數映射中不允許重複的鍵,並會產生編譯時期錯誤。

2.0.0

#

語言

#

函式庫

#
  • 將核心函式庫中的常數從 SCREAMING_CAPS 重新命名為 lowerCamelCase
  • 新增許多新的核心函式庫類別方法,如果您實作這些類別的介面,則需要實作這些方法。
  • 在使用 Dart 進行網頁開發時,不再支援 dart:isolatedart:mirrors

工具

#

Pub

#