重大變更與棄用
- 3.7.0
- 3.6.0
- 3.5.0
- 3.4.0
- 3.3.0
- 3.2.0
- 3.1.0
- 3.0.0
- 2.19.0
- 2.18.0
- 2.17.0
- 2.16.0
- 2.15.0
- 2.14.0
- 2.13.0
- 2.12.0
- 2.10.0
- 2.9.0
- 2.8.1
- 2.7.1
- 2.7.0
- 2.6.0
- 2.5.0
- 2.4.0
- 2.2.0
- 2.1.1
- 2.1.0
- 2.0.0
本頁列出 Dart SDK 中所有的重大變更與棄用,依發布版本和區域分類,以協助 Dart 使用者瞭解並管理其影響。完整的發布版本注意事項可在Dart SDK 變更日誌中取得。重大變更政策文件說明了 Dart 中重大變更與棄用的政策與流程。
本頁包含以下類型的重大變更:
未版本化:Dart SDK 不維護向後相容性,如果您依賴先前的行為,程式碼可能會在您升級 SDK 版本後立即中斷。
這些是大多數的變更,且未在此列表中特別標記。
語言版本化:Dart SDK 維護現有程式碼的向後相容性,行為變更只會在您升級程式碼的語言版本時生效 (可能會中斷依賴先前行為的程式碼)。
這些標記為: 語言版本化
棄用:Dart SDK 維護已棄用程式碼的相容性,並發出警告。棄用會在後續版本中完全移除,中斷任何依賴先前行為的程式碼。
這些標記為: 已棄用 / 已移除
實驗性:屬於發布版本的一部分,但在 SDK 中尚未被視為穩定,且可能會在版本之間中斷。實驗性變更不一定會有對應的重大變更問題,但可能在SDK 變更日誌中有更多詳細資訊。
這些標記為:實驗性
如果您對任何這些重大變更有疑問或疑慮,請在相關條目的重大變更問題連結中留言。若要收到未來重大變更的通知,請加入 Dart announce 群組。
3.7.0
#語言
#- 語言版本化 名為
_
的區域變數和參數現在為非綁定,且無法再使用或存取。 - 可達性分析現在會考量欄位是否使用
is
或as
類型提升為Null
。這使類型系統更自我一致,因為它反映類型提升的區域變數的行為。此變更預期不會在實務上造成任何差異。
函式庫
#dart:html
、dart:indexed:db
、dart:svg
、dart:web_audo
、dart:web_gl
、dart:js
#- 已棄用 這些舊版 Web 函式庫已正式棄用。預計在未來版本中移除。專案應遷移至使用
package:web
和dart:js_interop
。若要瞭解詳情,請查看遷移至 package:web。
dart:js
、dart:js_util
、package:js
#- 已棄用 這些舊版 JS 互通函式庫已正式棄用。預計在未來版本中移除。專案應遷移至使用
dart:js_interop
。若要瞭解詳情,請查看JS 互通性用法。
工具
#分析器
#- 已移除
package_api_docs
和unsafe_html
linter 規則已移除,應從analysis_options.yaml
檔案中移除。
格式化工具 (dart format
)
#- 語言版本化 格式化工具實作了新的風格,當使用語言版本 3.7 或更高版本格式化程式碼時,會產生新的輸出。
- 已移除
dart format
的--fix
標記已不再支援。若要套用類似的修正及更多功能,請設定您的分析選項並執行dart fix
。 - 已棄用
dart format
的--line-length
選項已棄用,並設定為移除。所有用法都應遷移至新的--page-width
選項。
3.6.0
#語言
#- Dart 用於對 throw 表達式的運算元執行類型推論的上下文已從「未知類型」變更為
Object
。這使類型系統更自我一致,因為它反映擲回null
是不合法的。此變更預期不會在實務上造成任何差異。
函式庫
#dart:io
#- 已移除
Platform()
建構子已移除。應移除Platform
的所有實例化。 HttpClient
現在會回應缺少「Location」標頭的重新導向,方法是擲回RedirectException
而非StateError
。
工具
#分析器
#- 已棄用
package_api_docs
和unsafe_html
linter 規則已棄用,並設定在 Dart 3.7 中移除。
編譯器前端 (cfe)
#- Dart 編譯器現在在類型綱要傳遞至子類型測試程序之前,立即計算其上限和下限閉包。在 Dart 3.6 之前,編譯器會在上限和下限計算的最開始計算它們。分析器已遵循此行為,因此已通過分析的應用程式不太可能受到此變更的影響。
Wasm 編譯器 (dart2wasm)
#- 條件
dart.library.js
在編譯為 WebAssembly 時,在條件式匯入上現在為false
。應改用dart.library.js_interop
條件。
格式化工具 (dart format
)
#當使用 Dart 3.6 SDK 或更新版本執行 dart format
時,以下變更可能會導致小的格式變更
- 在也使用
this.
或super.
的舊式函式類型形式參數上保留類型參數。 - 正確格式化同時具有
as
和if
子句的匯入。
Pub
#- 如果 Git 中追蹤的檔案有未提交的變更,
dart pub publish
現在會發出警告。
3.5.0
#語言
#- 編譯器用於對
await
表達式的運算元執行類型推論的上下文已變更為與分析器的行為一致。 - 編譯器用於對「if-null」表達式 (
e1 ?? e2
) 的右手邊執行類型推論的上下文已變更為與分析器的行為一致。舊行為可以透過提供明確類型來還原。
函式庫
#dart:core
#DateTime
現在在 Web 平台上儲存微秒,更緊密地符合原生平台上的行為。
dart:io
#dart:js_interop
#importModule
現在接受JSAny
而非String
,以支援其他 JS 值,例如TrustedScriptURL
物件。isTruthy
和not
現在傳回JSBoolean
而非bool
,以與其他 JS 運算子方法保持一致。ExternalDartReference
不再實作Object
。相反地,它現在接受類型參數 (T
),其界限為Object?
,以捕捉外部化的 Dart 物件的類型。
dart:typed_data
#- 已移除 typed data 的不可修改檢視類別已移除。請勿使用這些類別的建構子,改為使用 typed data list 上的新
asUnmodifiableView
方法。
執行階段
#- 已移除 Dart VM 不再支援不健全的 Null 安全性。
--no-sound-null-safety
CLI 選項已移除。Dart_NewListOf
和Dart_IsLegacyType
函式已從 C API 移除。
- 已移除
Dart_DefaultCanonicalizeUrl
函式已從 C API 移除。
3.4.0
#語言
#- cast 模式的模式上下文類型綱要現在為
_
(未知類型) 而非Object?
. - Dart 編譯器用於對 map 和 set 常值中的 null 感知擴展運算子 (
...?
) 的運算元執行類型推論的類型綱要已設為可為 null,以符合目前在 list 常值中發生的情況。
函式庫
#dart:cli
#- 實驗性 已移除
waitFor
函式已移除。
dart:html
、dart:indexed:db
、dart:svg
、dart:web_audo
、dart:web_gl
#- 已棄用 這些函式庫現在標記為舊版,未來將減少支援。新專案應偏好使用
package:web
和dart:js_interop
。若要瞭解詳情,請查看遷移至 package:web。
dart:js
#- 已棄用 此函式庫現在標記為舊版,未來將減少支援。用法應遷移至
dart:js_interop
和dart:js_interop_unsafe
。若要瞭解詳情,請查看/go/next-gen-js-interop
。
dart:js_util
#- 已棄用 此函式庫現在標記為舊版,未來將減少支援。用法應遷移至
dart:js_interop
和dart:js_interop_unsafe
。若要瞭解詳情,請查看/go/next-gen-js-interop
。
dart:io
#Stdout
有一個新的欄位lineTerminator
,可讓開發人員控制stdout
和stderr
使用的行尾字元。實作Stdout
的類別必須定義lineTerminator
欄位。stdout
和stderr
的預設語意未變更。- 已棄用
FileSystemDeleteEvent.isDirectory
屬性。它總是傳回false
。
dart:typed_data
#- 已棄用 typed data 的不可修改檢視類別已棄用。請勿使用這些類別的建構子,改為使用 typed data list 上的新
asUnmodifiableView
方法。
工具
#正式環境 JavaScript 編譯器 (dart2js)
#- 實驗性 已棄用 您現在應為
--dump-info
CLI 選項指定格式,可以是binary
或json
。json
格式已棄用,可能會在未來的 Dart 版本中移除。
Wasm 編譯器 (dart2wasm)
#- 實驗性 各種
dart compile wasm
CLI 引數已更新、移除或取代。若要瞭解詳情,請執行dart compile wasm --verbose --help
。
執行階段
#- 已移除 Dart VM 不再支援外部字串。因此,
Dart_IsExternalString
、Dart_NewExternalLatin1String
和Dart_NewExternalUTF16String
函式已從 Dart C API 移除。
3.3.0
#SDK
#實驗性 已移除 以下實驗性功能現已停用,因為它們已在 Dart 3 中發布,且語言版本為 3.0 或更高版本時已不再需要。應從分析選項、CLI 命令和 IDE 設定中移除它們的設定。
patterns
records
class-modifers
sealed-class
語言
#函式庫
#dart:cli
#- 實驗性 已棄用
waitFor
函式在另一個版本中仍為已棄用,並設定在 Dart 3.4 中移除。
dart:ffi
#- 已棄用
Pointer
類型上的elementAt
指標算術方法已棄用。請遷移至改用-
和+
運算子。 - 實驗性 已移除 先前棄用的
@FfiNative
註解已移除。用法應更新為使用@Native
註解。
dart:html
#- 現在建議使用
package:http
,而不是直接使用HttpRequest
。
dart:io
#- 現在建議使用
package:http
,而不是直接使用HttpClient
。
dart:js_interop
#- 實驗性 JS 類型 (例如
JSAny
) 具有新的編譯器特定表示類型。 - 實驗性 使用者定義的
@staticInterop
類別無法再實作JSAny
或JSObject
。用法應遷移至JSObject.fromInteropObject
或定義為擴充類型。 - 實驗性
JSArray
和JSPromise
現在具有泛型參數。 - 實驗性 各種擴充成員已移動或重新命名。若要瞭解更新的擴充功能,請參考
JSAnyUtilityExtension
和JSAnyOperatorExtension
。
dart:typed_data
#- typed data 的不可修改檢視類別將在 Dart 3.4 中棄用。請勿使用這些類別的建構子,改為使用 typed data list 上的新
asUnmodifiableView
方法。
dart:nativewrappers
#- 實驗性 所有原生包裝函式類別現在都標記為
base
,因此它們的子類型都無法實作。
工具
#正式環境 JavaScript 編譯器 (dart2js)
#Wasm 編譯器 (dart2wasm)
#- 實驗性 不允許匯入舊版 JS 互通函式庫。請改為偏好使用
dart:js_interop
和dart:js_interop_unsafe
。
分析器
#實驗性 無效的
dart doc
註解指令現在由分析器回報。由於 類型提升的改進,以下分析器診斷訊息可能會在先前通過分析的現有程式碼上觸發
unnecessary_non_null_assertion (不必要的非空斷言)
unnecessary_cast (不必要的轉型)
invalid_null_aware_operator (無效的 null 感知運算子)
Linter
#iterable_contains_unrelated_type
和list_remove_unrelated_type
linter 已移除。請考慮遷移至擴充的collection_methods_unrelated_type
linter。由於健全的 Null 安全性不再需要,因此以下 linter 已移除。您應從您的
analysis_options.yaml
檔案和任何忽略註解中移除它們的設定。always_require_non_null_named_parameters
avoid_returning_null
avoid_returning_null_for_future
3.2.0
#語言
#- 語言版本化 變更了可反駁模式的分割點至最上層模式,因此 if-case 語句中的類型提升與審查對象是否可能擲回例外狀況無關,保持一致。
函式庫
#dart:cli
#- 實驗性 已棄用
waitFor
函式。
dart:convert
#- 將
utf8.encode()
和Utf8Codec.encode()
的傳回類型從List<int>
變更為Uint8List
。
dart:developer
#- 已棄用
Service.getIsolateID
方法。
dart:ffi
#- 變更了
NativeCallable.nativeFunction
,因此如果接收器已關閉,呼叫現在會擲回錯誤,而不是傳回nullptr
。
dart:io
#dart:js_interop
#- 實驗性 已移除
JSNumber.toDart
,改用toDartDouble
和toDartInt
。 - 實驗性 已移除
Object.toJS
,改用Object.toJSBox.
。 - 實驗性 使用
dart:js_interop
將外部 JS 互通 API 限制為一組允許的類型。 - 實驗性 禁止在 dart2wasm 上使用
isNull
和isUndefined
。 - 實驗性 變更了
typeofEquals
和instanceof
API,使其都傳回 bool 而非JSBoolean
。此外,typeofEquals
現在接受String
而非JSString
。 - 實驗性 變更了
JSAny
和JSObject
類型,使其僅可由使用者@staticInterop
類型實作,不可擴充。 - 實驗性 變更了
JSArray.withLength
,使其接受int
而非JSNumber
。
工具
#開發 JavaScript 編譯器 (DDC)
#- 新增了 JavaScript
Symbol
和BigInt
類型的攔截器;它們不應再與package:js
類別一起使用。
正式環境 JavaScript 編譯器 (dart2js)
#- 新增了 JavaScript
Symbol
和BigInt
類型的攔截器;它們不應再與package:js
類別一起使用。
分析器
#語言版本化 私有 final 欄位提升可能會導致以下分析器警告在先前通過分析的現有程式碼上觸發
unnecessary_non_null_assertion (不必要的非空斷言)
invalid_null_aware_operator (無效的 null 感知運算子)
unnecessary_cast (不必要的轉型)
dart (Dart)class C { final num? _x = null; void test() { if (_x != null) { print(_x! * 2); // unnecessary_non_null_assertion print(_x?.abs()); // invalid_null_aware_operator } if (_x is int) { print((_x as int).bitLength); // unnecessary_cast } } }
3.1.0
#函式庫
#dart:async
#- 將
interface
修飾詞新增至純抽象類別:MultiStreamController
、StreamConsumer
、StreamIterator
和StreamTransformer
。
dart:io
#- 將
sameSite
新增至Cookie
類別,並新增類別SameSite
. FileSystemEvent
為sealed
。這表示FileSystemEvent
無法擴充或實作。
dart:js_interop
#- 實驗性 已移除
ObjectLiteral
;使用{}.jsify()
建立沒有具名成員的物件常值。
package:js
#external
@staticInterop
成員和external
擴充成員無法再用作 tear-off。宣告一個閉包或呼叫這些成員的非external
方法,並改用該方法。external
@staticInterop
成員和external
擴充成員將為具有選用參數的方法產生稍微不同的 JS 程式碼。
3.0.0
#語言
#語言版本化 將switch cases 的解譯從常數表達式變更為模式。
語言版本化 從已升級至 Dart 3.0 的函式庫中的類別宣告預設無法再用作 mixin。
如果
continue
語句目標為非迴圈 (for
、do
和while
語句) 或switch
成員的 label,Dart 會回報編譯時期錯誤。
函式庫
#- 以下現有類別已設為 mixin 類別:
Iterable
、IterableMixin
、IterableBase
、ListMixin
、SetMixin
、MapMixin
、LinkedListEntry
、StringConversionSink
。
dart:core
#- 已棄用 已棄用的 API。
dart:async
#- 已移除 已移除已棄用的
DeferredLibrary
類別。
dart:collection
#- 語言版本化 平台函式庫的變更。
dart:developer
#- 已移除 已移除已棄用的
MAX_USER_TAGS
常數。請改用maxUserTags
。 - 已移除 已移除已棄用的
Metrics
、Metric
、Counter
和Gauge
類別,因為它們自 Dart 2.0 以來已損壞。
dart:ffi
#- 實驗性 已棄用
@FfiNative
註解現在已棄用。用法應更新為使用@Native
註解。
dart:html
#dart:math
#- 語言版本化
Random
介面只能實作,不能擴充。
dart:io
#- 更新了
NetworkProfiling
,以容納 vm_service:11.0.0 中引入的新String
ID
2.19.0
#語言
#函式庫
#dart:convert
#- 已移除
JsonUtf8Encoder
中先前棄用的 API [DEFAULT_BUFFER_SIZE
] 已移除。
dart:developer
#- 已移除 已移除先前棄用的 API
ServiceExtensionResponse
中的kInvalidParams
、kExtensionError
、kExtensionErrorMax
和kExtensionErrorMin
。
dart:ffi
#- 變更了
Pointer
的執行階段類型引數為Never
,以準備完全移除執行階段類型引數。變更了Pointer.toString
,使其不報告任何類型引數。
dart:io
#- 不允許負數或十六進位 content-length 標頭.
File.create
現在接受新的選用exclusive
bool
參數,且當其為true
時,如果目標檔案已存在,則作業將失敗。- 多次呼叫
ResourceHandle.toFile()
、ResourceHandle.toSocket()
、ResourceHandle.toRawSocket()
或ResourceHandle.toRawDatagramSocket()
現在會擲回StateError
。
dart:isolate
#- 還原了
SendPort.send
回到對訊息內容的嚴格檢查,當在已知不共享相同程式碼的隔離區之間傳送訊息時。
dart:mirrors
#- 已移除 已移除 API
MirrorsUsed
和Comment
。
package:js
#@staticInterop
預覽功能的重大變更- 不允許具有此註解的類別使用
external
generative 建構子。如需更多詳細資訊,請參閱 48730 和 49941。 - 不允許具有此註解的類別的外部擴充成員使用類型參數.
- 具有此註解的類別也應具有
@JS
註解。 - 具有此註解的類別不能由沒有此註解的類別實作。
- 不允許具有此註解的類別使用
dart2js
#2.18.0
#語言
#函式庫
#dart:io
#- 將
dart:io
中RedirectException
的uri
屬性變更為可為 null. - 移除了
dart:io
網路 API 中遵循SCREAMING_CAPS
慣例的常數. - Dart VM 不再在結束時自動還原初始終端機設定。
工具
#Dart 命令列
#2.17.0
#函式庫
#dart:io
#- 新增了新的
connectionFactory
屬性至HttpClient
. - 新增了新的
keyLog
屬性至HttpClient
,可讓記錄 TLS 金鑰以進行除錯。 - 移除了
dart:io
中遵循SCREAMING_CAPS
的常數 - 新增了新的
allowLegacyUnsafeRenegotiation
屬性至SecurityContext
,可讓用戶端安全 Socket 進行 TLS 重新協商。
工具
#Dart 命令列
#- 已棄用 已棄用獨立
dart2js
工具。 - 已棄用 已棄用獨立
dartdevc
工具。 - 已移除 已移除獨立
dartdoc
工具。
2.16.0
#函式庫
#dart:io
#- 在 Windows 上,如果
newPath
指定目錄,Directory.rename
將不再刪除目錄。相反地,將擲回FileSystemException
。 - 已移除 已移除
Platform.packageRoot
API。
dart:isolate
#工具
#Dart 命令列
#- 已棄用 已棄用獨立
dartanalyzer
工具。 - 已棄用 已棄用獨立
dartdoc
工具。 - 已移除 已移除已棄用的獨立
pub
工具。
2.15.0
#函式庫
#dart:io
#- 更新了
SecurityContext
類別,以將最低 TLS 通訊協定版本設定為 TLS1_2_VERSION (1.2) 而非 TLS1_VERSION。
dart:web_sql
#dart:html
#- 移除
window.openDatabase
(與上述dart:web_sql
刪除相關)。
工具
#Dart 命令列
#- 移除獨立的
dart2native
工具. - 移除獨立的
dartfmt
工具。
Dart VM
#- 移除對
dart-ext:
樣式原生擴充功能的支援 - 群組化透過
Isolate.spawn()
API 產生的 isolates,使其在相同的受管理堆積上運作,並因此共享各種 VM 內部資料結構。
2.14.0
#函式庫
#dart:io
#HttpClient
中的 setter 回呼.authenticate
和.authenticateProxy
現在必須接受可為 null 的realm
引數(適用於預先遷移的 Null 安全程式碼)。
dart:typed_data
#- 此程式庫公開的大多數類型 不再能被擴充、實作或混入。
工具
#Dart VM
#- Expandos,以及
Dart_NewWeakPersistentHandle
和Dart_NewFinalizableHandle
的object
參數,不再接受Pointer
和Struct
的子類型
Dart 命令列
#- 已棄用獨立的
dart2native
工具 - 已棄用獨立的
dartfmt
工具。
dart2js
#dart2js
不再支援舊版瀏覽器,因為預設情況下它會發出 ES6+ JavaScript。
Dart Dev Compiler (DDC)
#- 變更
package:js
類別的子類型關係,使其更正確且與 Dart2JS 一致。
2.13.0
#函式庫
#package:js
#- 在非匿名 JS 互通類別的
@JS()
註解中,使用與@Native
註解匹配的String
已不再有效。
2.12.0
#語言
#函式庫
#dart:ffi
#- 已棄用對泛型
T
的sizeOf<T>
、Pointer<T>.elementAt()
、Pointer<T extends Struct>.ref
和Pointer<T extends Struct>[]
的調用 - 已棄用
package:ffi
中的allocate
,因為它將不再能夠泛型地調用sizeOf<T>
。 - 已棄用沒有任何原生成員的
Struct
子類型.
工具
#Dart VM
#Dart_WeakPersistentHandle
在引用的物件被垃圾回收時不再自動刪除自身,以避免競爭條件。- 將
Dart_WeakPersistentHandleFinalizer
重新命名為Dart_HandleFinalizer
,並移除了其handle
引數。
Pub
#2.10.0
#工具
#Dart VM
#- 將
dart_api_dl.cc
重新命名為dart_api_dl.c
,並變更為純 C 檔案。
2.9.0
#函式庫
#dart:convert
#- 當將包含不成對代理字元的字串編碼為 UTF-8 時,不成對的代理字元將被編碼為替換字元 (
U+FFFD
)。 - 當解碼 UTF-8 時,編碼的代理字元將被視為格式錯誤的輸入。
- 變更了針對格式錯誤的輸入序列發出的替換字元數量,以在使用
allowMalformed: true
解碼 UTF-8 時符合 WHATWG 編碼標準。
dart:html
#- 如果
CssClassSet
對應於多個元素,CssClassSet.add()
和CssClassSet.toggle
現在返回false
而不是null
。
dart:mirrors
#工具
#Dart VM
#- 當使用
print
函數列印字串時,預設實作會將字串中任何不成對的代理字元列印為替換字元 (U+FFFD
)。 - Dart API 中的
Dart_StringToUTF8
函數 會將不成對的代理字元轉換為替換字元。
2.8.1
#語言
#- 修正了一個實作錯誤,其中區域變數推斷會錯誤地使用類型變數的提升類型。
- 修正了一個實作錯誤,圍繞著
implements Function
、extends Function
或with Function
子句自 Dart 2.0.0 以來不再生效。
函式庫
#dart:async
#- 將
StreamSubscription.cancel()
的返回類型更改為Future<void>
. - 將
runZoned()
函數拆分為兩個函數:runZoned()
和runZonedGuarded()
,後者具有必需的onError
參數,而前者沒有。 - 傳遞給
Completer.completeError()
、Stream.addError()
、Future.error()
等的錯誤 不再能為null
。 - 使堆疊追蹤變為非 null.
dart:core
#RuneIterator
上的三個成員 在第一次調用moveNext()
之前存取時,不再返回null
。String.fromEnvironment()
的defaultValue
的預設值 現在是空字串而不是null
。int.fromEnvironment()
的defaultValue
參數的預設值 現在是零。
dart:ffi
#- 將
Pointer.asFunction()
和DynamicLibrary.lookupFunction()
更改為擴充方法。
dart:io
#- 變更
HttpHeaders
方法add()
和set
的簽名。 - 如果 socket 已被明確銷毀或升級為安全 socket,則
Socket
類別現在會在設定或取得 socket 選項時拋出SocketException
。 - 如果進程已分離 (
ProcessStartMode.detached
和ProcessStartMode.detachedWithStdio
),則Process
類別現在會在存取exitCode
getter 時拋出StateError
。 - 當未連接到子進程的 stdio (
ProcessStartMode.detached
和ProcessStartMode.inheritStdio
) 時,Process
類別現在也會在存取stdin
、stdout
和stderr
getter 時拋出錯誤。 - 如果
FileStat.stat()
或FileStat.statSync()
失敗,則返回的虛擬物件 現在包含 Unix 時間戳記,而不是accessed
、changed
和modified
getter 的null
。 HeaderValue
類別現在在兩種無效的邊緣情況下更嚴格地解析。
工具
#Dart Dev Compiler (DDC)
#我們修正了 DDC 和 Dart2JS 之間的一些不一致之處,以便使用者較少遇到一個編譯器接受但另一個編譯器失敗的程式碼。
- 刪除了舊版(基於分析器)的 DDC。
- 使用建議的
package:js
互通規範傳遞給 JavaScript 的函數現在必須使用對allowInterop
的調用包裝。 @JS()
類別中的建構子必須標記為external
。
dart2js
#- 對應的類型參數邊界現在只需要是相互子類型,而不是在重新命名綁定類型變數和等同所有頂級類型的情況下在結構上相等。
- 類型現在已 正規化。
@JS()
類別中的建構子必須標記為external
。- 完全移除了
--package-root
標誌,該標誌在 Dart 2.0.0 中已隱藏且停用。
2.7.1
#2.7.0
#語言
#函式庫
#dart:io
#- 新增了
IOOverrides.serverSocketBind
,以協助編寫希望模擬ServerSocket.bind
的測試。
2.6.0
#語言
#- 變更了在
FutureOr
內容中使用Null
值時的推斷。 也就是說,類似於Null
<:FutureOr<T>
形式的約束現在會產生Null
作為T
的解決方案。
函式庫
#dart:ffi
#- API 現在使用了靜態擴充成員。
- 移除了記憶體管理
Pointer.allocate
和Pointer.free
。 Pointer.offsetBy
已移除,請改用cast
和elementAt
。
2.5.0
#函式庫
#- 各種核心程式庫中的各種方法和屬性,過去宣告的返回類型為
List<int>
,已更新為宣告返回類型為Uint8List
。
dart:io
#Cookie
類別的建構子的name
和value
可選位置參數 現在是強制性的。Cookie
類別的name
和value
setter 現在驗證字串是否由允許的字元集組成且不為 null。
工具
#Pub
#- 發布到 pub.dev 的套件 不再能包含 git 依賴項。
2.4.0
#語言
#函式庫
#dart:isolate
#- 使用 dart2js 或 DDC 編譯時,
Isolate.resolvePackageUri
將始終拋出UnsupportedError
。
dart:async
#- 修正了
StreamIterator
類別中的錯誤,其中await for
允許null
作為 stream。
2.2.0
#函式庫
#package:kernel
#- Kernel AST API 中
InstanceConstant
類別上的klass
getter 已重新命名為classNode
,以保持一致性。 - 更新了
Link
實作,以在 Windows 上利用真正的符號連結而不是接合點。
2.1.1
#函式庫
#dart:io
#工具
#Dart VM
#- 修正了使用
dart:mirrors
反射性地以不正確的方式調用方法時的健全性漏洞,該方式違反了其靜態類型。
2.1.0
#語言
#- 許多應該被檢測和報告的靜態錯誤在 2.0.0 中不受支援。 這些錯誤現在會被報告,這表示現有的不正確程式碼可能會顯示新的錯誤
工具
#dart2js
#- 不允許在 const map 中使用重複的鍵,並且會產生編譯時期錯誤。
2.0.0
#語言
#- 用使用類型推斷和運行時檢查的健全靜態類型系統取代了不健全的可選靜態類型系統,以前稱為 強模式。
- 標記為
async
的函數現在同步運行,直到第一個await
語句。
函式庫
#- 將核心程式庫中的常數從
SCREAMING_CAPS
重新命名為lowerCamelCase
。 - 在核心程式庫類別中新增了許多新方法,如果您實作這些類別的介面,則需要實作這些方法。
- 使用 Dart for Web 時,不再支援
dart:isolate
和dart:mirrors
。
工具
#Pub
#- 用 新的建置系統 取代了 pub 基於轉換器的建置系統。
除非另有說明,否則本網站上的文件反映的是 Dart 3.7.1。 頁面上次更新於 2025-02-12。 查看原始碼 或 回報問題。