重大變更和棄用
- 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 中所有語言和程式庫的重大變更和棄用,並按發佈版本和區域組織,以協助 Dart 使用者瞭解和管理其影響。完整的發佈說明可在 Dart SDK 變更日誌中找到。重大變更原則文件說明了 Dart 中重大變更和棄用相關的原則和流程。
本頁包含下列類型的重大變更:
未版本化:Dart SDK 不維持向後相容性,如果您依賴先前的行為,則在您升級 SDK 版本後,程式碼可能會立即中斷。
這些是大多數變更,且未在本清單中特別標記。
語言版本化:Dart SDK 為現有程式碼維持向後相容性,且行為變更僅在您升級程式碼的語言版本時才會生效(可能會中斷依賴先前行為的程式碼)。
這些標記為: 語言版本化
棄用:Dart SDK 維持已棄用程式碼的相容性,並發出警告。然後在後續版本中完全移除棄用項目,從而中斷任何依賴先前行為的程式碼。
這些標記為: 已棄用 / 已移除
實驗性:屬於發佈版本的一部分,但在 SDK 中尚未視為穩定版本,且可能會在版本之間中斷。實驗性變更不一定有對應的重大變更問題,但可能在 SDK 變更日誌中有更多詳細資訊。
這些標記為: 實驗性
如果您對任何這些重大變更有疑問或疑慮,請在相關條目的重大變更問題連結中發表評論。若要收到未來重大變更的通知,請加入 Dart 公告群組。
3.7.0
#暫定
下列變更預計會包含在 3.7 穩定版本中,但最終清單可能在此之前變更。為減少這些變更的潛在影響,請考慮在 3.7 版本發佈前處理它們。
語言
#- 語言版本化 名為
_
的區域變數和參數現在是非綁定的,且無法再使用或存取。 - 可達性分析現在會考慮使用
is
或as
將欄位提升類型為Null
的情況。這使類型系統更具自我一致性,因為它反映了提升的區域變數的行為。預計此變更不會在實務中產生任何差異。
工具
#分析器
#- 已移除
package_api_docs
和unsafe_html
lint 規則已移除,應從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
lint 規則已棄用,並設定為在 Dart 3.7 中移除。
編譯器前端 (cfe)
#- Dart 編譯器現在在類型結構描述傳遞至子類型測試程序之前,計算其上限和下限閉包。在 Dart 3.6 之前,編譯器在上限和下限計算開始時就計算它們。分析器已遵循此行為,因此已通過分析的應用程式不太可能受到此變更的影響。
Wasm 編譯器 (dart2wasm)
#- 編譯為 WebAssembly 時,條件式匯入中的
dart.library.js
條件現在為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
#- 已移除 已移除類型化資料的不可修改檢視類別。請改用類型化資料列表上的新的
asUnmodifiableView
方法,而不是使用這些類別的建構函式。
執行階段
#- 已移除 Dart VM 不再支援不健全的 null 安全性。
- 已移除
--no-sound-null-safety
CLI 選項。 - 已從 C API 中移除
Dart_NewListOf
和Dart_IsLegacyType
函式。
- 已移除
- 已移除 已從 C API 中移除
Dart_DefaultCanonicalizeUrl
函式。
3.4.0
#語言
#- 轉換模式的模式上下文型別綱要現在是
_
(未知型別),而不是Object?
。. - Dart 編譯器在對映射和集合文字中的可空感知展開運算子 (
...?
) 的運算元執行型別推斷時使用的型別綱要已設為可空,以符合目前列表文字中發生的情況。
程式庫
#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
#- 已棄用 已棄用類型化資料的不可修改檢視類別。請改用類型化資料列表上的新的
asUnmodifiableView
方法,而不是使用這些類別的建構函式。
工具
#生產 JavaScript 編譯器 (dart2js)
#- 實驗性 已棄用 現在您應該為
--dump-info
CLI 選項指定binary
或json
格式。json
格式已棄用,可能會在未來的 Dart 版本中移除。
Wasm 編譯器 (dart2wasm)
#- 實驗性 已更新、移除或取代各種
dart compile wasm
CLI 引數。若要瞭解詳情,請執行dart compile wasm --verbose --help
。
執行階段
#- 已移除 Dart VM 不再支援外部字串。因此,已從 Dart C API 中移除
Dart_IsExternalString
、Dart_NewExternalLatin1String
和Dart_NewExternalUTF16String
函式。
3.3.0
#SDK
#實驗性 已移除 以下實驗現在已停用,因為它們已在 Dart 3 中發佈,並且在語言版本為 3.0 或更高版本時不再需要。應從分析選項、CLI 命令和 IDE 設定中移除它們的組態。
模式
記錄
類別修飾詞
密封類別
語言
#程式庫
#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
#- 實驗性 像
JSAny
這樣的 JS 型別具有新的編譯器特定表示型別。 - 實驗性 使用者定義的
@staticInterop
類別不再可以實作JSAny
或JSObject
。應將使用方式移轉至JSObject.fromInteropObject
或定義為擴充功能型別。 - 實驗性
JSArray
和JSPromise
現在具有泛型參數。 - 實驗性 已移動或重新命名各種擴充功能成員。若要瞭解更新的擴充功能,請參考
JSAnyUtilityExtension
和JSAnyOperatorExtension
。
dart:typed_data
#- 類型化資料的不可修改檢視類別將在 Dart 3.4 中棄用。請改用類型化資料列表上的新的
asUnmodifiableView
方法,而不是使用這些類別的建構函式。
dart:nativewrappers
#- 實驗性 所有原生包裝類別現在都標記為
base
,因此它們的任何子型別都無法實作。
工具
#生產 JavaScript 編譯器 (dart2js)
#- 傳遞給
noSuchMethod
的Invocation
不再具有縮小的memberName
,即使使用--minify
編譯也是如此。
Wasm 編譯器 (dart2wasm)
#- 實驗性 禁止匯入舊版的 JS 互通函式庫。請優先使用
dart:js_interop
和dart:js_interop_unsafe
。
分析器
#實驗性 分析器現在會報告無效的
dart doc
註解指示詞。由於 型別提升的改進,下列分析器診斷可能會在先前通過分析的現有程式碼上觸發
unnecessary_non_null_assertion
unnecessary_cast
invalid_null_aware_operator
Linter
#已移除
iterable_contains_unrelated_type
和list_remove_unrelated_type
lint。請考慮移轉至擴充的collection_methods_unrelated_type
lint。由於健全的 null 安全性不再需要下列 lint,因此已將它們移除。您應該從
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 欄位提升可能會導致下列分析器警告在先前通過分析的現有程式碼上觸發
dartclass 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
擴充功能成員不能再用作撕裂值。請宣告一個會呼叫這些成員的閉包或非external
方法,並改用它。external
@staticInterop
成員和external
擴充功能成員會為具有選用參數的方法產生稍微不同的 JS 程式碼。
3.0.0
#語言
#語言版本化 將 switch case 的解釋從常數表達式更改為模式。
語言版本化 從已升級至 Dart 3.0 的函式庫中宣告的類別,預設不再能作為 mixin 使用。
如果
continue
語句的目標 標籤 不是迴圈 (for
、do
和while
語句) 或switch
成員,則 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
#語言
#- 由於
Null
和Never
類型,將其他程式碼標記為不可到達。 - 不要將無法存取的私有名稱委派給
noSuchMethod
. - 針對頂層類型推論期間的所有循環相依性回報編譯時期錯誤。
程式庫
#dart:convert
#- 已移除 已移除
JsonUtf8Encoder
中先前已棄用的 API [DEFAULT_BUFFER_SIZE
]。
dart:developer
#- 已移除 已移除先前已棄用的 API
kInvalidParams
、kExtensionError
、kExtensionErrorMax
和kExtensionErrorMin
(在ServiceExtensionResponse
中)。
dart:ffi
#- 為了完全移除執行時間類型引數,將
Pointer
的執行時間類型引數變更為Never
。已將Pointer.toString
變更為不回報任何類型引數。
dart:io
#- 不允許負數或十六進位內容長度標頭.
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
生成建構函式。如需更多詳細資料,請參閱 48730 和 49941。 - 不允許此注釋的外部擴充成員使用類型參數.
- 使用此注釋的類別也應具有
@JS
注釋。 - 使用此注釋的類別無法由沒有此注釋的類別實作。
- 不允許使用此注釋的類別使用
dart2js
#2.18.0
#語言
#程式庫
#dart:io
#- 已將
dart:io
中RedirectException
的uri
屬性變更為可為 null. - 已移除遵循
SCREAMING_CAPS
慣例的dart:io
網路 API 中的常數. - Dart VM 不再在結束時自動還原初始終端機設定。
工具
#Dart 命令列
#2.17.0
#程式庫
#dart:io
#- 已為
HttpClient
新增新的connectionFactory
屬性. - 已為
HttpClient
新增新的keyLog
屬性,允許記錄 TLS 金鑰以進行偵錯。 - 已移除遵循
SCREAMING_CAPS
的dart:io
中的常數 - 已為
SecurityContext
新增新的allowLegacyUnsafeRenegotiation
屬性,允許用戶端安全插槽進行 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 產生的隔離區分組,以在相同的受管理堆積上運作,因此共用各種 VM 內部資料結構。
2.14.0
#程式庫
#dart:io
#HttpClient
中的設定器回呼.authenticate
和.authenticateProxy
現在必須接受可為 null 的realm
引數 (適用於遷移前的空值安全程式碼)。
dart:typed_data
#- 此函式庫公開的大多數類型 不再能夠擴展、實作或混入。
工具
#Dart VM
#- Expandos 以及
Dart_NewWeakPersistentHandle
和Dart_NewFinalizableHandle
的object
參數,不再接受Pointer
和Struct
的子類型
Dart 命令列
#- 已棄用獨立的
dart2native
工具 - 已棄用獨立的
dartfmt
工具。
dart2js
#dart2js
不再支援舊版瀏覽器,因為它預設會發出 ES6+ JavaScript。
Dart 開發編譯器 (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:mirrors
,Web 編譯器 (dart2js 和 DDC) 現在會產生編譯時錯誤。
工具
#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
),在存取exitCode
getter 時,Process
類別現在會擲回StateError
。 - 當未連線到子程序的 stdio 時(
ProcessStartMode.detached
和ProcessStartMode.inheritStdio
),在存取stdin
、stdout
和stderr
getter 時,Process
類別現在也會擲回錯誤。 - 如果
FileStat.stat()
或FileStat.statSync()
失敗,返回的虛擬物件現在包含 Unix epoch 時間戳記,而不是accessed
、changed
和modified
getter 的null
。 HeaderValue
類別現在在兩個無效的邊緣情況下會更嚴格地剖析。
工具
#Dart 開發編譯器 (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
作為串流。
2.2.0
#程式庫
#package:kernel
#- 為了保持一致性,Kernel AST API 中
InstanceConstant
類別上的klass
getter 已重新命名為classNode
。 - 更新了
Link
實作,以便在 Windows 上使用真正的符號連結而不是聯結。
2.1.1
#程式庫
#dart:io
#工具
#Dart VM
#2.1.0
#語言
#- 在 2.0.0 中不支援許多應該偵測和報告的靜態錯誤。現在會報告這些錯誤,這表示現有的不正確程式碼可能會顯示新的錯誤。
工具
#dart2js
#- 常數 map 中的重複鍵是不允許的,並且會產生編譯時錯誤。
2.0.0
#語言
#- 使用型別推斷和執行階段檢查,以健全的靜態型別系統取代了不健全的選用靜態型別系統,該系統以前稱為強模式。
- 標記為
async
的函式現在會同步執行,直到第一個await
陳述式。
程式庫
#- 將核心程式庫中的常數從
SCREAMING_CAPS
重新命名為lowerCamelCase
。 - 在核心程式庫類別中新增了許多新的方法,如果您實作這些類別的介面,則需要實作這些方法。
- 在 Web 上使用 Dart 時,不再支援
dart:isolate
和dart:mirrors
。
工具
#Pub
#- 用新的建置系統取代了 pub 基於轉換器的建置系統。
除非另有說明,否則本網站上的文件反映了 Dart 3.6.0。頁面最後更新於 2024-12-10。 檢視原始碼 或 回報問題。