目次

破壊的変更と非推奨

このページでは、Dartのすべての言語およびライブラリの破壊的変更と非推奨を、リリースと領域ごとに整理してリストし、Dartユーザーがその影響を理解し、管理するのに役立てています。完全なリリースノートは、Dart SDKの変更履歴にあります。破壊的変更ポリシーのドキュメントでは、Dartにおける破壊的変更と非推奨に関するポリシーとプロセスを説明しています。

このページには、次の種類の破壊的変更が含まれています。:

  • バージョン管理なし:Dart SDKは下位互換性を維持せず、以前の動作に依存しているコードは、SDKバージョンをアップグレードするとすぐに破損する可能性があります。

    これらは変更の大部分であり、このリストでは特にマークされていません。

  • 言語バージョン管理:Dart SDKは既存のコードの下位互換性を維持し、動作の変更は、コードの言語バージョンをアップグレードしたときにのみ有効になります(以前の動作に依存するコードが破損する可能性があります)。

    これらは次のようにマークされています: 言語バージョン管理

  • 非推奨:Dart SDKは、非推奨のコードとの互換性を警告付きで維持します。非推奨は、後続のリリースで完全に削除され、以前の動作に依存するコードが破損します。

    これらは次のようにマークされています: 非推奨 / 削除済

  • 実験的:リリースの一部ですが、まだSDKで安定しているとはみなされておらず、バージョン間で破損する可能性があります。実験的な変更には、対応する破壊的変更の問題が常に存在するとは限りませんが、SDKの変更履歴で詳細を確認できます。

    これらは次のようにマークされています:実験的

これらの破壊的変更について質問や懸念がある場合は、関連するエントリからリンクされている破壊的変更の問題にコメントしてください。将来の破壊的変更に関する通知を受け取るには、Dart announceグループに参加してください。

3.6.0

#

暫定的
次の変更は3.6の安定版リリースに含まれる予定ですが、最終リストはそれまでに変更される可能性があります。これらの変更による潜在的な影響を軽減するために、3.6リリースより前に考慮することを検討してください。

言語

#

3.5.0

#

言語

#

ライブラリ

#

dart:core

#

dart:io

#

dart:js_interop

#

dart:typed_data

#

ランタイム

#
  • 削除済 Dart VMは、健全でないNull安全性をサポートしなくなりました。
    • --no-sound-null-safety CLIオプションが削除されました。
    • Dart_NewListOf関数とDart_IsLegacyType関数がC APIから削除されました。
  • 削除済 Dart_DefaultCanonicalizeUrl関数がC APIから削除されました。

3.4.0

#

言語

#

ライブラリ

#

dart:cli

#

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

#
  • 非推奨 これらのライブラリはレガシーとしてマークされ、今後はサポートが減少します。新しいプロジェクトでは、package:webdart:js_interopを使用することをお勧めします。詳細については、package:webへの移行をご覧ください。

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:io

#

dart:typed_data

#

ツール

#

プロダクション JavaScript コンパイラ (dart2js)

#
  • 試験的 非推奨 --dump-info CLI オプションには、binary または json のいずれかの形式を指定する必要があります。json 形式は非推奨であり、今後の Dart リリースで削除される可能性があります。

Wasm コンパイラ (dart2wasm)

#
  • 試験的 さまざまな dart compile wasm CLI 引数が更新、削除、または置き換えられました。詳細については、dart compile wasm --verbose --help を実行してください。

ランタイム

#
  • 削除 Dart VM は、外部文字列をサポートしなくなりました。その結果、Dart_IsExternalStringDart_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

#

dart:html

#
  • HttpRequest を直接使用する代わりに、package:http を使用することが推奨されるようになりました。

dart:io

#
  • HttpClient を直接使用する代わりに、package:http を使用することが推奨されるようになりました。

dart:js_interop

#
  • 試験的 JSAny のような JS 型には、新しいコンパイラ固有の表現型があります。
  • 試験的 ユーザー定義の @staticInterop クラスは、JSAny または JSObject を実装できなくなりました。使用箇所は JSObject.fromInteropObject に移行するか、拡張型として定義する必要があります。
  • 試験的 JSArrayJSPromise にジェネリックパラメータが追加されました。
  • 試験的 さまざまな拡張メンバーが移動または名前変更されました。更新された拡張機能については、JSAnyUtilityExtension および JSAnyOperatorExtension を参照してください。

dart:typed_data

#

dart:nativewrappers

#

ツール

#

プロダクション JavaScript コンパイラ (dart2js)

#

Wasm コンパイラ (dart2wasm)

#

アナライザー

#
  • 試験的 無効な dart doc コメントディレクティブが、アナライザーによって報告されるようになりました。

  • 型昇格の改善により、以前は分析に合格していた既存のコードで、次のアナライザー診断がトリガーされる可能性があります

    • unnecessary_non_null_assertion
    • unnecessary_cast
    • invalid_null_aware_operator

リンター

#
  • iterable_contains_unrelated_type および list_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

#

言語

#
  • 言語バージョン管理 refutable パターンの分割点をトップレベルパターンに変更し、if-case ステートメントでの型昇格は、検査対象が例外をスローする可能性があるかどうかに関係なく、一貫するようにしました。

ライブラリ

#

dart:cli

#

dart:convert

#

dart:developer

#
  • 非推奨 Service.getIsolateID メソッド。

dart:ffi

#

dart:io

#

dart:js_interop

#
  • 試験的 削除 JSNumber.toDarttoDartDouble および toDartInt に置き換えました。
  • 試験的 削除 Object.toJSObject.toJSBox に置き換えました。
  • 試験的 dart:js_interop を使用した外部 JS interop API を、許可された型セットに制限しました。
  • 試験的 dart2wasm での isNull および isUndefined の使用を禁止しました。
  • 試験的 typeofEquals および instanceof API を両方とも JSBoolean の代わりに bool を返すように変更しました。また、typeofEqualsJSString の代わりに String を受け取るようになりました。
  • 試験的 JSAny および JSObject 型を、ユーザーの @staticInterop 型によって拡張可能ではなく、実装のみ可能に変更しました。
  • 試験的 JSArray.withLengthJSNumber の代わりに int を受け取るように変更しました。

ツール

#

開発用 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 を、同じコードを共有することが判明していないアイソレート間でメッセージを送信する際のメッセージの内容に対する厳密なチェックに戻しました。

dart:mirrors

#
  • 削除 API MirrorsUsed および Comment を削除しました。

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 のセッターコールバック .authenticate および .authenticateProxy は、(移行済みの Null 安全コードで) Nullable の realm 引数を受け入れる必要があります。

dart:typed_data

#

ツール

#

Dart VM

#

Dart コマンドライン

#

dart2js

#

Dart Dev Compiler (DDC)

#

2.13.0

#

ライブラリ

#

package:js

#

2.12.0

#

言語

#

ライブラリ

#

dart:ffi

#

ツール

#

Dart VM

#

Pub

#

2.10.0

#

ツール

#

Dart VM

#

2.9.0

#

ライブラリ

#

dart:convert

#

dart:html

#
  • CssClassSet.add() および CssClassSet.toggle は、CssClassSet が複数の要素に対応する場合、null ではなく false を返すようになりました。

dart:mirrors

#

ツール

#

Dart VM

#

2.8.1

#

言語

#

ライブラリ

#

dart:async

#

dart:core

#

dart:ffi

#
  • Pointer.asFunction() および DynamicLibrary.lookupFunction() を拡張メソッドに変更しました。

dart:io

#

ツール

#

Dart Dev Compiler (DDC)

#

DDCとDart2JS間のいくつかの不整合を修正し、ユーザーが一方のコンパイラーでは受け入れられるが、他方では失敗するコードに遭遇する頻度を減らしました。

  • DDC のレガシー(アナライザーベース)バージョンを削除しました。
  • 推奨される package:js 相互運用仕様を使用して JavaScript に渡される関数は、allowInterop の呼び出しでラップする必要があります。
  • @JS() クラスのコンストラクターは external でマークする必要があります。

dart2js

#
  • 対応する型パラメーターの境界は、境界型変数の名前の変更およびすべてのトップタイプの等価化を考慮して構造的に等しい必要はなく、相互の部分型であるだけでよくなりました。
  • 型は正規化されるようになりました。
  • @JS() クラスのコンストラクターは external でマークする必要があります。
  • Dart 2.0.0で非表示および無効化されていた --package-root フラグを完全に削除しました。

2.7.1

#

2.7.0

#

言語

#

ライブラリ

#

dart:io

#
  • ServerSocket.bind をモックしたいテストの作成を支援するために、IOOverrides.serverSocketBind を追加しました。

2.6.0

#

言語

#

ライブラリ

#

dart:ffi

#
  • API は静的拡張メンバーを利用するようになりました。
  • メモリ管理の Pointer.allocatePointer.free を削除しました。
  • Pointer.offsetBy を削除しました。代わりに castelementAt を使用してください。

2.5.0

#

ライブラリ

#

dart:io

#

ツール

#

Pub

#

2.4.0

#

言語

#

ライブラリ

#

dart:isolate

#
  • Isolate.resolvePackageUri は、dart2js または DDC でコンパイルされた場合、常に UnsupportedError をスローします。

dart:async

#

2.2.0

#

ライブラリ

#

package:kernel

#
  • Kernel AST API の InstanceConstant クラスの klass ゲッターは、一貫性のために classNode に名前が変更されました。
  • Link の実装を更新し、Windows でジャンクションの代わりに実際のシンボリックリンクを利用するようにしました。

2.1.1

#

ライブラリ

#

dart:io

#

ツール

#

Dart VM

#

2.1.0

#

言語

#

ツール

#

dart2js

#
  • 定数マップ内の重複キーは許可されておらず、コンパイル時エラーが発生します。

2.0.0

#

言語

#

ライブラリ

#
  • コアライブラリの定数の名前を SCREAMING_CAPS から lowerCamelCase に変更しました。
  • コアライブラリクラスに多くの新しいメソッドを追加しました。これらのクラスのインターフェースを実装する場合は、実装する必要があります。
  • dart:isolate および dart:mirrors は、Web 用の Dart を使用する場合、サポートされなくなりました。

ツール

#

Pub

#