重大變更與棄用
- 3.9.0
- 3.8.0
- 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.9.0
#語言
#- 語言版本限定 在計算型別提升、可達性和確定性賦值時,現在預設啟用空安全。因此,改進的死程式碼分析可能會導致對以前透過分析的現有程式碼觸發新的分析器診斷。
3.8.0
#庫
#dart:html
#- 已移除
Element.created建構函式已移除。 dart:html中的原生類,例如HtmlElement,不再可以被擴充套件。
工具
#分析器
#- 已棄用
avoid_null_checks_in_equality_operatorslint 規則已棄用,應從analysis_options.yaml檔案中移除。
開發 JavaScript 編譯器 (DDC)
#- 現在,當一個重定向工廠建構函式被“拆分”並且其可選的非空引數之一未提供值時,會丟擲執行時錯誤。未來這很可能會成為編譯時錯誤。
生產 JavaScript 編譯器 (dart2js)
#- 實驗性 已移除
--experiment-new-rti和--use-old-rti標誌不再受支援。
格式化工具 (dart format)
#- 語言版本限定 格式化工具進行了一些更改和修復,使得當程式碼的語言版本為 3.8 或更高時,會產生新的格式化輸出。
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_htmllint 規則已移除,應從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_htmllint 規則已棄用,並計劃在 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 不再支援不健全的空安全。
--no-sound-null-safetyCLI 選項已移除。Dart_NewListOf和Dart_IsLegacyType函式已從 C API 中移除。
- 已移除
Dart_DefaultCanonicalizeUrl函式已從 C API 中移除。
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-infoCLI 選項指定binary或json格式。json格式已棄用,並可能在未來的 Dart 版本中移除。
Wasm 編譯器 (dart2wasm)
#- 實驗性 各種
dart compile wasmCLI 引數已更新、移除或替換。瞭解更多資訊,請執行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 配置中移除它們的配置。
模式記錄類修飾符密封類
語言
#庫
#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註釋指令現在由分析器報告。由於型別提升的改進,以下分析器診斷可能會對以前透過分析的現有程式碼觸發:
不必要的非空斷言不必要的型別轉換無效的空感知運算子
Linter
#iterable_contains_unrelated_type和list_remove_unrelated_typelint 已移除。考慮遷移到擴充套件的collection_methods_unrelated_typelint。由於健全的空安全不再需要,以下 lint 已移除。您應該從
analysis_options.yaml檔案和任何忽略註釋中移除它們的配置。always_require_non_null_named_parametersavoid_returning_nullavoid_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和instanceofAPI 已更改為均返回 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
#- 為
Cookie類添加了sameSite,並添加了SameSite類。. FileSystemEvent是sealed的。這意味著FileSystemEvent不能被擴充套件或實現。
dart:js_interop
#- 實驗性 已移除
ObjectLiteral;請使用{}.jsify()建立不帶命名成員的物件字面量。
package:js
#external@staticInterop成員和external擴充套件成員不再能用作 tear-offs。請宣告一個呼叫這些成員的閉包或非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 中引入的新Stringid。
2.19.0
#語言
#庫
#dart:convert
#- 已移除 先前已棄用的 API
JsonUtf8Encoder中的 [DEFAULT_BUFFER_SIZE] 已移除。
dart:developer
#- 已移除 移除了先前已棄用的 API
ServiceExtensionResponse中的kInvalidParams,kExtensionError,kExtensionErrorMax, 和kExtensionErrorMin。
dart:ffi
#- 將
Pointer的執行時型別引數更改為Never,以準備完全移除執行時型別引數。將Pointer.toString更改為不報告任何型別引數。
dart:io
#- 不允許使用負數或十六進位制內容長度頭.
File.create現在接受新的可選exclusivebool引數,當其為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屬性更改為可空. - 移除了
dart:io網路 API 中遵循SCREAMING_CAPS命名約定的常量. - Dart VM 在退出時不再自動恢復初始終端設定。
工具
#Dart 命令列
#2.17.0
#庫
#dart:io
#- 為
HttpClient添加了新的connectionFactory屬性. - 為
HttpClient添加了新的keyLog屬性,該屬性允許記錄 TLS 金鑰用於除錯。 - 移除了
dart:io中遵循SCREAMING_CAPS命名約定的常量 - 為
SecurityContext添加了一個新的allowLegacyUnsafeRenegotiation屬性,該屬性允許客戶端安全套接字進行 TLS 重新協商。
工具
#Dart 命令列
#- 已棄用 棄用了獨立的
dart2js工具。 - 已棄用 棄用了獨立的
dartdevc工具。 - 已移除 移除了獨立的
dartdoc工具。
2.16.0
#庫
#dart:io
#- 在 Windows 上,如果
newPath指定了目錄,Directory.rename將不再刪除該目錄。相反,將丟擲FileSystemException。 - 已移除 移除了
Platform.packageRootAPI。
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中的 setter 回撥.authenticate和.authenticateProxy現在必須接受可空的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 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。 - 使堆疊跟蹤非空.
dart:core
#RuneIterator上的三個成員在首次呼叫moveNext()之前訪問時不再返回null。String.fromEnvironment()中defaultValue的預設值現在是空字串而不是null。int.fromEnvironment()的defaultValue引數的預設值現在是零。
dart:ffi
#- 將
Pointer.asFunction()和DynamicLibrary.lookupFunction()更改為擴充套件方法。
dart:io
#- 更改了
HttpHeaders方法的簽名add()和set。 - 如果套接字在設定或獲取套接字選項時已被明確銷燬或升級為安全套接字,則
Socket類現在會丟擲SocketException。 - 如果程序在訪問
exitCodegetter 時處於分離狀態(ProcessStartMode.detached和ProcessStartMode.detachedWithStdio),則Process類現在會丟擲StateError。 - 當未連線到子程序的 stdio(
ProcessStartMode.detached和ProcessStartMode.inheritStdio)時,Process類在訪問stdin、stdout和stderrgetter 時也會丟擲錯誤。 - 如果
FileStat.stat()或FileStat.statSync()失敗,返回的虛擬物件現在包含 Unix 紀元時間戳,而不是accessed、changed和modifiedgetter 的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和valuesetter 現在會驗證字串是否由允許的字元集組成且不為 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類上的klassgetter 已重新命名為classNode以保持一致性。 - 更新了
Link實現,以便在 Windows 上使用真正的符號連結而不是連線點。
2.1.1
#庫
#dart:io
#工具
#Dart VM
#2.1.0
#語言
#- 2.0.0 版本中未支援許多本應被檢測和報告的靜態錯誤。現在這些錯誤已被報告,這意味著現有的錯誤程式碼可能會顯示新的錯誤:
工具
#dart2js
#- 常量對映中不允許重複鍵,並且會產生編譯時錯誤。
2.0.0
#語言
#- 用基於型別推斷和執行時檢查的健全靜態型別系統取代了不健全的可選靜態型別系統,後者以前稱為強模式。
- 標記為
async的函式現在同步執行,直到遇到第一個await語句。
庫
#- 將核心庫中的常量從
SCREAMING_CAPS重新命名為lowerCamelCase。 - 為核心庫類添加了許多新方法,如果您實現這些類的介面,則需要實現這些方法。
- 在 Web 上使用 Dart 時,不再支援
dart:isolate和dart:mirrors。
工具
#Pub
#- 將 pub 基於轉換器的構建系統替換為新的構建系統。