chore: update dependency dart to v3.7.2 #43
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR contains the following updates:
3.4.4
->3.7.2
Release Notes
dart-lang/sdk (dart)
v3.7.2
Compare Source
v3.7.1
Compare Source
v3.7.0
Compare Source
Released on: 2025-02-12
Language
Dart 3.7 adds wildcard variables to the language. To use them, set your
package's [SDK constraint][language version] lower bound to 3.7 or greater
(
sdk: '^3.7.0'
).Wildcard Variables
Local variables and parameters named
_
are now non-binding and they canbe declared multiple times without collisions. You will no longer be able to use
these variables nor access their values. All wildcard variable declaration types
that have this behavior are described in the
wildcard variables specification.
Top-level variables, top-level function names, type names, member names, etc.
are unchanged. They can be named
_
and used as they are today.These are a few examples of where wildcard variables can be used:
Other Language Changes
Null
using
is
oras
, this type promotion is now properly accounted for inreachability analysis. This makes the type system more self-consistent,
because it mirrors the behavior of promoted local variables. This change is
not expected to make any difference in practice.
Tools
Analyzer
declaration.
prefer_relative_imports
andalways_use_package_imports
lint rules.~/
operation into/
, when the~/
operation is not available.
await
if the expression is currentlynot assignable, but awaiting it would make it assignable.
forEach
call into a for-loop nowconsider the
prefer_final_in_for_each
andalways_specify_types
lintrules.
cascade_invocations
lint rule violation.Expanded
widget,and with a
Flexible
widget.else-block to read
else if
.use_decorated_box
by swapping theContainer
withColoredBox
as suggested by the lint.the
show
combinator on an existing import.import directive with the given prefix.
hide
combinator.
show
combinator, and optionally a prefix.initializer of a late field.
prefer_const_declarations
lint rule, preferring to addconst
to a variabledeclaration rather than the initial value.
on
keyword in an extension declaration.override.
(Thanks @FMorschel for the above enhancements!
sort_constructors_first
lintrule.
function-typed parameters.
strict_top_level_inference
][strict_top_level_inference] lint rule.unnecessary_underscores
][unnecessary_underscores] lint rule.specify_nonobvious_property_types
][specify_nonobvious_property_types] lint rule.omit_obvious_property_types
][omit_obvious_property_types] lint rule.unnecessary_async
][unnecessary_async] lint rule.unsafe_variance
][unsafe_variance] lint rule.package_api_docs
][package_api_docs] lint rule.unsafe_html
][unsafe_html] lint rule.Dart format
The formatter implements a new style better suited for the kind of
declarative code that many Dart users are writing today. The new style looks
similar to the style you get when you add trailing commas to argument lists,
except that now the formatter will add and remove those commas for you.
The
dart format
command uses the language version ofeach input file to determine which style it gets. If the language version is 3.6
or lower, the code is formatted with the old style. If 3.7 or later, it gets the
new tall style.
You typically control the language version by setting a min SDK constraint in
your package's pubspec. This means that when you update the SDK
constraint in your pubspec to move to 3.7, you are also opting in to the new
style.
In order to correctly determine the language version of each file it formats,
dart format
(like otherdart
commands) looks for apackage_config.json
file surrounding the files being formatted. This means that you need to run
dart pub get
before formatting code in your package. If you have formatchecks in your continuous integration server, you'll want to make sure it runs
dart pub get
too.We don't intend to support both styles indefinitely. At some point in the
future when most of the ecosystem is on 3.7 or later, support for the old style
will be removed.
In addition to the new formatting style, a number of other changes are included,
some of them breaking:
Project-wide page width configuration. By long request, you can now
configure your preferred formatting page width on a project-wide basis. When
formatting a file, the formatter will look in the file's directory and any
surrounding directories for an
analysis_options.yaml
file. If it finds one,it looks for YAML like so:
If it finds a page width matching that schema, then the file is formatted
using that width. Since the formatter will walk the surrounding directories
until it finds an
analysis_options.yaml
file, this can be used to globallyset the page width for an entire directory, package, or even collection of
packages. Since
analysis_options.yaml
files already support aninclude
key to reference other
analysis_options.yaml
files, you can define a singleconfiguration and share it across a number of packages.
Opting out a region of code from formatting. In code formatted using the
new style, you can use a pair of special marker comments to opt a region of
code out of automated formatting:
The comments must be exactly
// dart format off
and// dart format on
.A file may have multiple regions, but they can't overlap or nest.
This can be useful for highly structured data where custom layout helps the
reader understand the data, like large lists of numbers.
Overriding the page width for a single file. In code formatted
using the new tall style, you can use a special marker comment to control the
page width that it's formatted using:
This comment must appear before any code in the file and must match that
format exactly. The width set by the comment overrides the width set by any
surrounding
analysis_options.yaml
file.This feature is mainly for code generators that generate and immediately
format code but don't know about any surrounding
analysis_options.yaml
that might be configuring the page width. By inserting this comment in the
generated code before formatting, it ensures that the code generator's
behavior matches the behavior of
dart format
.End users should mostly use
analysis_options.yaml
for configuring theirpreferred page width (or do nothing and continue to use the default page width
of 80).
Breaking change: Remove support for
dart format --fix
. Instead, usedart fix
. It supports all of the fixes thatdart format --fix
could applyand many more.
Treat the
--stdin-name
name as a path when inferring language version.When reading input on stdin, the formatter still needs to know its language
version to know what style to apply. If the
--stdin-name
option is set, thenthat is treated as a file path and the formatter looks for a package config
surrounding that file path to infer the language version from.
If you don't want that behavior, pass in an explicit language version using
--language-version=
, or use--language-version=latest
to parse the inputusing the latest language version supported by the formatter.
If
--stdin-name
and--language-version
are both omitted, then theformatter parses stdin using the latest supported language version.
Rename the
--line-length
option to--page-width
. This is consistentwith the public API, internal implementation, and docs, which all use "page
width" to refer to the limit that the formatter tries to fit code into.
The
--line-length
name is still supported for backwards compatibility, butmay be removed at some point in the future. You're encouraged to move to
--page-width
. Use of this option (however it's named) is rare, and willlikely be even rarer now that project-wide configuration is supported, so
this shouldn't affect many users.
Dart to Javascript Compiler (dart2js)
The dart2js compiler which is invoked when the command 'dart compile js' is
used has been switched to use an AOT snapshot instead of a JIT snapshot.
Dart Development Compiler (dartdevc)
The dartdevc compiler and kernel_worker utility have been switched to use an
AOT snapshot instead of a JIT snapshot, the SDK build still includes a JIT
snapshot of these tools as package build/build_web_compiler depends on it. The
AOT snapshot can be used as follows to run DDC /bin/dartaotruntime /bin/snapshots/dartdevc_aot.dart.snapshot
Libraries
dart:html
dart:html
is marked deprecated and will be removed in an upcoming release.Users should migrate to using
dart:js_interop
andpackage:web
. See#59716.
dart:indexed_db
dart:indexed_db
is marked deprecated and will be removed in an upcomingrelease. Users should migrate to using
dart:js_interop
andpackage:web
.See #59716.
dart:io
HttpException
will be thrown byHttpClient
andHttpServer
if aNUL
(
0x00
) appears in a received HTTP header value.dart:svg
dart:svg
is marked deprecated and will be removed in an upcoming release.Users should migrate to using
dart:js_interop
andpackage:web
. See#59716.
dart:web_audio
dart:web_audio
is marked deprecated and will be removed in an upcomingrelease. Users should migrate to using
dart:js_interop
andpackage:web
.See #59716.
dart:web_gl
dart:web_gl
is marked deprecated and will be removed in an upcoming release.Users should migrate to using
dart:js_interop
andpackage:web
. See#59716.
dart:js
dart:js
is marked deprecated and will be removed in an upcoming release.Users should migrate to using
dart:js_interop
. See #59716.dart:js_util
dart:js_util
is marked deprecated and will be removed in an upcomingrelease. Users should migrate to using
dart:js_interop
. See #59716.v3.6.2
Compare Source
Released on: 2025-01-30
HttpServer
responses were not correctly encodedif a "Content-Type" header was set (issue #59719).
dart format
to parse code at language version 3.6 so that digitseparators can be parsed correctly (issue #59815, dart_style issue
#1630).
between new and legacy inspector events (issue #59884).
dart fix
on a folder that contains a library with multiplefiles and more than one needs a fix, the fix will now be applied correctly
only once to each file (issue #59572).
v3.6.1
Compare Source
Released on: 2025-01-08
pub get
will now delete stray.dart_tool/package_config.json
files in directories between theworkspace root and workspace directories. Preventing confusing behavior
when migrating a repository to pub workspaces (issue pub#4445).
the incorrect generic covariant field in a constant object (issue
#57084).
(issue #56552).
v3.6.0
Compare Source
Released on: 2024-12-11
Language
Dart 3.6 adds digit separators to the language. To use them, set your
package's [SDK constraint][language version] lower bound to 3.6 or greater
(
sdk: '^3.6.0'
).Digit separators
Digits in number literals (decimal integer literals, double literals,
scientific notation literals, and hexadecimal literals) can now include
underscores between digits, as "digit separators." The separators do not change
the value of a literal, but can serve to make the number more readable.
Separators are not allowed at the start of a number (this would be parsed as an
identifier), at the end of a number, or adjacent to another character in a
number, like
.
,x
, or thee
in scientific notation.to perform type inference on the operand of a
throw
expression has beenchanged from the "unknown type" to
Object
. This makes the type system moreself-consistent, because it reflects the fact that it's not legal to throw
null
. This change is not expected to make any difference in practice.Libraries
dart:io
Breaking Change #52444: Removed the
Platform()
constructor, whichhas been deprecated since Dart 3.1.
Breaking Change #53618:
HttpClient
now responds to a redirectthat is missing a "Location" header by throwing
RedirectException
, insteadof
StateError
.dart:js_interop
JSArrayBuffer
,JSDataView
, and concrete typed arraytypes e.g.
JSInt8Array
.length
and[]
/[]=
operators toJSArray
.toJSCaptureThis
sothis
is passed in from JavaScript to thecallback as the first parameter.
from
method onJSArray
to create aJSArray
from a givenJavaScript iterable or array-like object.
Tools
CFE
DOWN algorithms in the CFE are changed to match the specification
and the corresponding implementations in the Analyzer. The upper and
lower closures of type schemas are now computed just before they are
passed into the subtype testing procedure instead of at the very
beginning of the UP and DOWN algorithms.
Dart format
this.
orsuper.
.as
andif
clauses.Wasm compiler (dart2wasm)
dart.library.js
is now false on conditional imports indart2wasm. Note that it was already a static error to import
dart:js
directly (see #55266).
Pub
Support for workspaces. This allows you to develop and resolve multiple
packages from the same repo together. See https://dart.dev/go/pub-workspaces
for more info.
New command
dart pub bump
. Increments the version number of the currentpackage.
For example:
dart pub bump minor
will change the version from1.2.3
to1.3.0
.New validation:
dart pub publish
will warn if yourgit status
is notclean.
New flag
dart pub upgrade --unlock-transitive
.dart pub upgrade --unlock-transitive pkg
, will unlock and upgrade all thedependencies of
pkg
instead of justpkg
.Analyzer
use_truncating_division
][use_truncating_division] lint rule.omit_obvious_local_variable_types
][omit_obvious_local_variable_types] lint rule.specify_nonobvious_local_variable_types
][specify_nonobvious_local_variable_types] lint rule.avoid_futureor_void
][avoid_futureor_void] lint rule."invert conditional expression".
v3.5.4
Compare Source
v3.5.3
Compare Source
issue resulting in a missing tab bar when DevTools is embedded in
IntelliJ and Android Studio (issue#56607).
DevTools is opened instead of only the first time (issue#56607).
embedded in IntelliJ and Android Studio (issue#56607).
v3.5.2
Compare Source
ZLibDecoder
would incorrectly attempt to decompress datapast the end of the zlib footer (issue #56481).
dart
fromPATH
could result in some commands notworking as expected (issues #56080, #56306, #56499).
setContextRoots
requests orbeing provided incorrect context roots in multi-package workspaces (issue
#56475).
v3.5.1
Compare Source
include:
inanalysis_options.yaml
file in a nestedfolder in the workspace (issue#56464).
dart compile wasm
when optimizations areenabled (issue #56423).
dart2wasm
compiler in unsound-O3
/-O4
modes where aimplicit setter for a field of generic type will store
null
instead of thefield value (issue #56374).
dart2wasm
compiler that can trigger in certain situationswhen using partial instantiations of generic tear-offs (constructors or static
methods) in constant expressions (issue #56440).
also known is UP, is provided the missing implementation for
StructuralParameterType
objects. In some corner cases cases thelacking implementation resulted in a crash of the compiler (issue #56457).
v3.5.0
Compare Source
Language
Breaking Change #55418: The context used by the compiler to perform
type inference on the operand of an
await
expression has been changed tomatch the behavior of the analyzer. This change is not expected to make any
difference in practice.
Breaking Change #55436: The context used by the compiler to perform
type inference on the right hand side of an "if-null" expression (
e1 ?? e2
)has been changed to match the behavior of the analyzer. change is expected to
have low impact on real-world code. But in principle it could cause
compile-time errors or changes in runtime behavior by changing inferred
types. The old behavior can be restored by supplying explicit types.
Libraries
dart:core
DateTime
on the web platform now storesmicroseconds. The web implementation is now practically compatible with the
native implementation, where it is possible to round-trip a timestamp in
microseconds through a
DateTime
value without rounding the lowerdigits. This change might be breaking for apps that rely in some way on the
.microsecond
component always being zero, for example, expecting only threefractional second digits in the
toString()
representation. Smalldiscrepancies in arithmetic due to rounding of web integers may still occur
for extreme values, (1)
microsecondsSinceEpoch
outside the safe range,corresponding to dates with a year outside of 1685..2255, and (2) arithmetic
(
add
,subtract
,difference
) where theDuration
argument or resultexceeds 570 years.
dart:io
Breaking Change #55786:
SecurityContext
is nowfinal
. This meansthat
SecurityContext
can no longer be subclassed.SecurityContext
subclasses were never able to interoperate with other parts of
dart:io
.A
ConnectionTask
can now be created using an existingFuture<Socket>
.Fixes #55562.
dart:typed_data
Breaking Change #53785: The unmodifiable view classes for typed data
have been removed. These classes were deprecated in Dart 3.4.
To create an unmodifiable view of a typed-data object, use the
asUnmodifiableView()
methods added in Dart 3.3.Added superinterface
TypedDataList
to typed data lists, implementing bothList
andTypedData
. Allows abstracting over all such lists without losingaccess to either the
List
or theTypedData
members.A
ByteData
is still only aTypedData
, not a list.dart:js_interop
Breaking Change #55508:
importModule
now accepts aJSAny
insteadof a
String
to support other JS values as well, likeTrustedScriptURL
s.Breaking Change #55267:
isTruthy
andnot
now returnJSBoolean
instead of
bool
to be consistent with the other operators.Breaking Change
ExternalDartReference
no longer implementsObject
.ExternalDartReference
now accepts a type parameterT
with a bound ofObject?
to capture the type of the Dart object that is externalized.ExternalDartReferenceToObject.toDartObject
now returns aT
.ExternalDartReferenceToObject
andObjectToExternalDartReference
are nowextensions on
T
andExternalDartReference<T>
, respectively, whereT extends Object?
. See #55342 and #55536 for more details.Fixed some consistency issues with
Function.toJS
across all compilers.Specifically, calling
Function.toJS
on the same function gives you a new JSfunction (see issue #55515), the maximum number of arguments that are
passed to the JS function is determined by the static type of the Dart
function, and extra arguments are dropped when passed to the JS function in
all compilers (see #48186).
Tools
Analyzer
unintended_html_in_doc_comment
][unintended_html_in_doc_comment] lint rule.invalid_runtime_check_with_js_interop_types
][invalid_runtime_check_with_js_interop_types] lint rule.document_ignores
][document_ignores] lint rule.the switch becomes exhaustive.
const
keywords to child nodes, whereappropriate.
Pub
dart pub downgrade --tighten
to restrict lower bounds ofdependencies' constraints to the minimum that can be resolved.
Dart Runtime
The Dart VM only executes sound null safe code, running of unsound null
safe code using the option
--no-sound-null-safety
has been removed.Dart_NewListOf
andDart_IsLegacyType
functions areremoved from Dart C API.
Dart_DefaultCanonicalizeUrl
is removed from the Dart C API.Configuration
📅 Schedule: Branch creation - "before 10am on monday" in timezone Asia/Tokyo, Automerge - At any time (no schedule defined).
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR was generated by Mend Renovate. View the repository job log.