examples icon indicating copy to clipboard operation
examples copied to clipboard

Update dependency dart to v3

Open renovate[bot] opened this issue 2 years ago • 2 comments

Note: This PR body was truncated due to platform limits.

This PR contains the following updates:

Package Update Change
dart (source) major >=2.1.0 <3.0.0 -> 3.10.6
dart (source) major >=2.0.0-dev.68.0 <3.0.0 -> 3.10.6
dart (source) major >=2.2.0 <3.0.0 -> 3.10.6

Release Notes

dart-lang/sdk (dart)

v3.10.6

Compare Source

v3.10.5

Compare Source

v3.10.4

Compare Source

v3.10.3

Compare Source

v3.10.2

Compare Source

v3.10.1

Compare Source

v3.10.0

Compare Source

Released on: 2025-11-12

Language

Dart 3.10 adds dot shorthands to the language. To use them, set your package's [SDK constraint][language version] lower bound to 3.10 or greater (sdk: '^3.10.0').

Dart 3.10 also adjusts the inferred return type of a generator function (sync* or async*) to avoid introducing unneeded nullability.

Dot shorthands

Dot shorthands allow you to omit the type name when accessing a static member in a context where that type is expected.

These are some examples of ways you can use dot shorthands:

Color color = .blue;
switch (color) {
  case .blue:
    print('blue');
  case .red:
    print('red');
  case .green:
    print('green');
}
Column(
  crossAxisAlignment: .start,
  mainAxisSize: .min,
  children: widgets,
)

To learn more about the feature, check out the feature specification.

Eliminate spurious Null from generator return type

The following local function f used to have return type Iterable<int?>. The question mark in this type is spurious because the returned iterable will never contain null (return; stops the iteration, it does not add null to the iterable). This feature makes the return type Iterable<int>.

void main() {
  f() sync* {
    yield 1;
    return;
  }
}

This change may cause some code elements to be flagged as unnecessary. For example, f().first?.isEven is flagged, and f().first.isEven is recommended instead.

Tools
Analyzer
  • The analyzer includes a new plugin system. You can use this system to write your own analysis rules and IDE quick fixes.

    • Analysis rules: Static analysis checks that report diagnostics (lints or warnings). You see these in your IDE and at the command line via dart analyze or flutter analyze.
    • Quick fixes: Local refactorings that correct a reported lint or warning.
    • Quick assists: Local refactorings available in the IDE that are not associated with a specific diagnostic.

    See the documentation for writing an analyzer plugin, and the documentation for using analyzer plugins to learn more.

  • Lint rules which are incompatible with each other and which are specified in included analysis options files are now reported.

  • Offer to add required named field formal parameters in a constructor when a field is not initialized.

  • Support the new @Deprecated annotations by reporting warnings when specific functionality of an element is deprecated.

  • Offer to import a library for an appropriate extension member when method or property is accessed on a nullable value.

  • Offer to remove the const keyword for a constructor call which includes a method invocation.

  • Remove support for the deprecated @required annotation.

  • Add two assists to bind constructor parameters to an existing or a non-existing field.

  • Add a warning which is reported when an @experimental member is used outside of the package in which it is declared.

  • Add a new lint rule, remove_deprecations_in_breaking_versions, is added to encourage developers to remove any deprecated members when the containing package has a "breaking version" number, like x.0.0 or 0.y.0.

  • (Thanks @​FMorschel for many of the above enhancements!)

Hooks

Support for hooks -- formerly know as native assets -- are now stable.

You can currently use hooks to do things such as compile or download native assets (code written in other languages that are compiled into machine code), and then call these assets from the Dart code of a package.

For more details see the hooks documentation.

Dart CLI and Dart VM
  • The Dart CLI and Dart VM have been split into two separate executables.

    The Dart CLI tool has been split out of the VM into it's own embedder which runs in AOT mode. The pure Dart VM executable is called dartvm and has no Dart CLI functionality in it.

    The Dart CLI executable parses the CLI commands and invokes the rest of the AOT tools in the same process, for the 'run' and 'test' commands it execs a process which runs dartvm.

    dart hello.dart execs the dartvm process and runs the hello.dart file.

    The Dart CLI is not generated for ia32 as we are not shipping a Dart SDK for ia32 anymore (support to execute the dartvm for ia32 architecture is retained).

Libraries
dart:async
  • Added Future.syncValue constructor for creating a future with a known value. Unlike Future.value, it does not allow an asynchronous Future<T> as the value of a new Future<T>.
dart:core
  • Breaking Change #​61392: The Uri.parseIPv4Address function no longer incorrectly allows leading zeros. This also applies to Uri.parseIPv6Address for IPv4 addresses embedded in IPv6 addresses.
  • The Uri.parseIPv4Address adds start and end parameters to allow parsing a substring without creating a new string.
  • New annotations are offered for deprecating specific functionalities:
  • The ability to implement the RegExp class and the RegExpMatch class is deprecated.
dart:io
  • Breaking Change #​56468: Marked IOOverrides as an abstract base class so it can no longer be implemented.
  • Added ability to override behavior of exit(...) to IOOverrides.
dart:js_interop
  • JSArray.add is added to avoid cases where during migration from List to JSArray, JSAnyOperatorExtension.add is accidentally used. See #​59830 for more details.
  • isA<JSBoxedDartObject> now checks that the value was the result of a toJSBox operation instead of returning true for all objects.
  • For object literals created from extension type factories, the @JS() annotation can now be used to change the name of keys in JavaScript. See #​55138 for more details.
  • Compile-time checks for Function.toJS now apply to toJSCaptureThis as well. Specifically, the function should be a statically known type, cannot contain invalid types in its signature, cannot have any type parameters, and cannot have any named parameters.
  • On dart2wasm, typed lists that are wrappers around typed arrays now return the original typed array when unwrapped instead of instantiating a new typed array with the same buffer. This applies to both the .toJS conversions and jsify. See #​61543 for more details.
  • Uint16ListToJSInt16Array is renamed to Uint16ListToJSUint16Array.
  • JSUint16ArrayToInt16List is renamed to JSUint16ArrayToUint16List.
  • The dart2wasm implementation of dartify now converts JavaScript Promises to Dart Futures rather than JSValues, consistent with dart2js and DDC. See #​54573 for more details.
  • createJSInteropWrapper now additionally takes an optional parameter which specifies the JavaScript prototype of the created object, similar to createStaticInteropMock in dart:js_util. See #​61567 for more details.
dart:js_util
  • dart2wasm no longer supports dart:js_util and will throw an UnsupportedError if any API from this library is invoked. This also applies to package:js/js_util.dart. package:js/js.dart continues to be supported. See #​61550 for more details.

v3.9.4

Compare Source

Released on: 2025-09-30

Pub
  • dart pub get --example will now resolve example/ folders in the entire workspace, not only in the root package. This fixes dart-lang/pub#4674 that made flutter pub get crash if the examples had not been resolved before resolving the workspace.

v3.9.3

Compare Source

Released on: 2025-09-09

Tools
Development JavaScript compiler (DDC)
  • Fixes a pattern that could lead to exponentially slow compile times when static calls are deeply nested within a closure. When present this led to builds timing out or taking several minutes rather than several seconds.

v3.9.2

Compare Source

Released on: 2025-08-27

Tools
Development JavaScript compiler (DDC)
  • Fixes an unintentional invocation of class static getters during a hot reload in a web development environment. This led to possible side effects being triggered early or crashes during the hot reload if the getter throws an exception.

v3.9.1

Compare Source

Released on: 2025-08-20

This is a patch release that:

  • Fixes an issue in DevTools causing assertion errors in the terminal after clicking 'Clear' on the Network Screen (issue dart-lang/sdk#61187).
  • Fixes miscompilation to ARM32 when an app used a large amount of literals (issue flutter/flutter#172626).
  • Fixes an issue with git dependencies using tag_pattern, where the pubspec.lock file would not be stable when running dart pub get (issue dart-lang/pub#4644).

v3.9.0

Compare Source

Released on: 2025-08-13

Language

Dart 3.9 assumes null safety when computing type promotion, reachability, and definite assignment. This makes these features produce more accurate results for modern Dart programs. As a result of this change, more dead_code warnings may be produced. To take advantage of these improvements, set your package's SDK constraint lower bound to 3.9 or greater (sdk: '^3.9.0').

Tools
Analyzer
  • The dart command-line tool commands that use the analysis server now run the AOT-compiled analysis server snapshot. These include dart analyze, dart fix, and dart language-server.

    There is no functional difference when using the AOT-compiled analysis server snapshot. But various tests indicate that there is a significant speedup in the time to analyze a project.

    In case of an incompatibility with the AOT-compiled snapshot, a --no-use-aot-snapshot flag may be passed to these commands. (Please file an issue with the appropriate project if you find that you need to use this flag! It will be removed in the future.) This flag directs the tool to revert to the old behavior, using the JIT-compiled analysis server snapshot. To direct the Dart Code plugin for VS Code to pass this flag, use the dart.analyzerAdditionalArgs setting. To direct the Dart IntelliJ plugin to pass this flag, use the dart.server.additional.arguments registry property, similar to these steps.

  • Add the switch_on_type lint rule.

  • Add the unnecessary_unawaited lint rule.

  • Support a new annotation, @awaitNotRequired, which is used by the discarded_futures and unawaited_futures lint rules.

  • Improve the avoid_types_as_parameter_names lint rule to include type parameters.

  • The definition of an "obvious type" is expanded for the relevant lint rules, to include the type of a parameter.

  • Many small improvements to the discarded_futures and unawaited_futures lint rules.

  • The code that calculates fixes and assists has numerous performance improvements.

  • A new "Remove async" assist is available.

  • A new "Convert to normal parameter" assist is available for field formal parameters.

  • New fixes are available for the following diagnostics:

    • for_in_of_invalid_type
    • implicit_this_reference_in_initializer
    • prefer_foreach
    • undefined_operator
    • use_if_null_to_convert_nulls_to_bools
  • Numerous fixes and improvements are included in the "create method," "create getter," "create mixin," "add super constructor," and "replace final with var" fixes.

  • Dependencies listed in dependency_overrides in a pubspec.yaml file now have document links to pub.dev.

  • Improvements to type parameters and type arguments in the LSP type hierarchy.

  • Folding try/catch/finally blocks is now supported for LSP clients.

  • Improve code completion suggestions with regards to operators, extension members, named parameters, doc comments, patterns, collection if-elements and for-elements, and more.

  • Improve syntax highlighting of escape sequences in string literals.

  • Add "library cycle" information to the diagnostic pages.

  • (Thanks @​FMorschel for many of the above enhancements!)

Dart build
  • Breaking change of feature in preview: dart build -f exe <target> is now dart build cli --target=<target>. See dart build cli --help for more info.
Dart Development Compiler (dartdevc)
  • Outstanding async code now checks and cancels itself after a hot restart if it was started in a different generation of the application before the restart. This includes outstanding Futures created by calling JSPromise.toDart from thedart:js_interop and the underlying the dart:js_util helper promiseToFuture. Dart callbacks will not be run, but callbacks on the JavaScript side will still be executed.

  • Fixed a soundness issue that allowed direct invocation of the value returned from a getter without any runtime checks when the getter's return type was a generic type argument instantiated as dynamic or Function.

    A getter defined as:

    class Container<T> {
      T get value => _value;
      ...
    }
    

    Could trigger the issue with a direct invocation:

    Container<dynamic>().value('Invocation with missing runtime checks!');
    
Dart native compiler

Added cross-compilation support for target architectures of arm (ARM32) and riscv64 (RV64GC) when the target OS is Linux.

Pub
  • Git dependencies can now be version-solved based on git tags.

    Use a tag_pattern in the descriptor and a version constraint, and all commits matching the pattern will be considered during resolution. For example:

    dependencies:
      my_dependency:
        git:
          url: https://github.com/example/my_dependency
          tag_pattern: v{{version}}
        version: ^2.0.1
    
  • Starting from language version 3.9 the flutter constraint upper bound is now respected in your root package. For example:

    name: my_app
    environment:
      sdk: ^3.9.0
      flutter: 3.33.0
    

    Results in dart pub get failing if invoked with a version of the Flutter SDK different from 3.33.0.

    The upper bound of the flutter constraint is still ignored in packages used as dependencies. See flutter/flutter#95472 for details.

v3.8.3

Compare Source

Released on: 2025-07-31

This is a patch release that:

  • Fixes an issue with the DevTools Network screen and Hot Restart (issue flutter/devtools#9203)
  • Fixes an issue when clearing the DevTools network screen (issue #​61187)

v3.8.2

Compare Source

Released on: 2025-07-16

This is a patch release that:

  • Fixes an issue with the size of cross-compiled binaries (issue #​61097)

v3.8.1

Compare Source

Released on: 2025-05-28

This is a patch release that:

  • Fixes an issue in DDC with late variables being incorrectly captured within async function bodies (issue #​60748).

v3.8.0

Compare Source

Released on: 2025-05-20

Language

Dart 3.8 adds null-aware elements to the language. To use them, set your package's [SDK constraint][language version] lower bound to 3.8 or greater (sdk: '^3.8.0').

Null-aware elements

Null-aware elements make it easier to omit a value from a collection literal if it's null. The syntax works in list literals, set literals, and map literals. Within map literals, both null-aware keys and values are supported. Here is an example a list literal written in both styles, without using null-aware elements and using them:

String? lunch = isTuesday ? 'tacos!' : null;

var withoutNullAwareElements = [
  if (lunch != null) lunch,
  if (lunch.length != null) lunch.length!,
  if (lunch.length case var length?) length,
];

var withNullAwareElements = [
  ?lunch,
  ?lunch.length,
  ?lunch.length,
];

To learn more about null-aware collection elements, check out the documentation and the feature specification.

Libraries
dart:core
  • Added Iterable.withIterator constructor.
dart:io
  • Added HttpClientBearerCredentials.
  • Updated Stdout.supportsAnsiEscapes and Stdin.supportsAnsiEscapes to return true for TERM containing tmux values.
dart:html
  • Breaking change: Native classes in dart:html, like HtmlElement, can no longer be extended. Long ago, to support custom elements, element classes exposed a .created constructor that adhered to the v0.5 spec of web components. On this release, those constructors have been removed and with that change, the classes can no longer be extended. In a future change, they may be marked as interface classes as well. This is a follow up from an earlier breaking change in 3.0.0 that removed the registerElement APIs. See #​53264 for details.
dart:ffi
  • Added Array.elements which exposes an Iterable over the Array's content.
Tools
Analyzer
  • The analyzer now supports "doc imports," a new comment-based syntax which enables external elements to be referenced in documentation comments without actually importing them. See the documentation for details.
  • Code completion is improved to offer more valid suggestions. In particular, the suggestions are improved when completing text in a comment reference on a documentation comment for an extension, a typedef, or a directive (an import, an export, or a library). Additionally, instance members can now be suggested in a documentation comment reference.
  • Offer additional assist to wrap a Flutter widget with a FutureBuilder widget.
  • Add a quick assist to wrap with ValueListenableBuilder.
  • Add a quick fix to convert an (illegal) extension field declaration into a getter declaration.
  • Add a quick fix to help code comply with a few lint rules that encourage omitting types: omit_local_variable_types, omit_obvious_local_variable_types, and omit_obvious_property_types.
  • Add a quick fix to create an extension method to resolve an "undefined method invocation" error.
  • Renaming a closure parameter is now possible.
  • Renaming a field now adjusts implicit this references in order to avoid name collisions.
  • Renaming a field formal parameter now properly renames known super-parameters in subclasses in other libraries.
  • Renaming a method parameter now properly renames across the type hierarchy.
  • The "encapsulate field" quick assist now works on final fields.
  • The "inline method" refactoring now properly handles inner closures.
  • The quick fix that adds names to a show clause or removes names from a hide clause can now add or remove multiple names simultaneously, in order to resolve as many "undefined" errors as possible.
  • The "remove const" quick fix now operates on more types of code.
  • The "add missing required argument" quick fix can now add multiple missing required arguments.
  • Add a new warning that reports an import or export directive with multiple show or hide clauses, which are never necessary.
  • Add a quick fix for this warning.
  • Add LSP document links for lint rules in analysis options files.
  • Add LSP document links for dependency packages in pubspec files.
  • Fix various issues around patterns, like highlighting, navigation, and autocompletion.
  • Add the use_null_aware_elements lint rule.
  • Add the experimental unnecessary_ignore lint rule.
  • (Thanks @​FMorschel for many of the above enhancements!)
Dart Development Compiler (dartdevc)

In order to align with dart2js semantics, DDC will now throw a runtime error when a redirecting factory is torn off and one of its optional non-nullable parameters is provided no value. The implicit null passed to the factory will not match the non-nullable type and this will now throw.

In the future this will likely be a compile-time error and will be entirely disallowed.

Dart to Javascript Compiler (dart2js)

Removed the --experiment-new-rti and --use-old-rti flags.

Dart native compiler

Added cross-compilation support for the Linux x64 and Linux ARM64 target platforms.

Dart format

In 3.7.0, we released a largely rewritten formatter supporting a new "tall" style. Since then, we've gotten a lot of feedback and bug reports and made a number of fixes in response to that.

Features

Some users strongly prefer the old behavior where a trailing comma will be preserved by the formatter and force the surrounding construct to split. That behavior is supported again (but off by default) and can enabled by adding this to a surrounding analysis_options.yaml file:

formatter:
  trailing_commas: preserve

This is similar to how trailing commas work in the old short style formatter applied to code before language version 3.7.

Bug fixes
  • Don't add a trailing comma in lists that don't allow it, even when there is a trailing comment (issue dart-lang/dart_style#1639).
Style changes

The following style changes are language versioned and only affect code whose [language version][] is 3.8 or later. Dart code at 3.7 or earlier is formatted the same as it was before.

  • Allow more code on the same line as a named argument or =>.

    // Before:
    function(
      name:
          (param) => another(
            argument1,
            argument2,
          ),
    );
    
    // After:
    function(
      name: (param) => another(
        argument1,
        argument3,
      ),
    );
    
  • Allow the target or property chain part of a split method chain on the RHS of =, :, and =>.

    // Before:
    variable =
        target.property
            .method()
            .another();
    
    // After:
    variable = target.property
        .method()
        .another();
    
  • Allow the condition part of a split conditional expression on the RHS of =, :, and =>.

    // Before:
    variable =
        condition
        ? longThenBranch
        : longElseBranch;
    
    // After:
    variable = condition
        ? longThenBranch
        : longElseBranch;
    
  • Don't indent conditional branches redundantly after =, :, and =>.

    // Before:
    function(
      argument:
          condition
              ? thenBranch
              : elseBranch,
    )
    
    // After:
    function(
      argument:
          condition
          ? thenBranch
          : elseBranch,
    )
    
  • Indent conditional branches past the operators.

    // Before:
    condition
        ? thenBranch +
            anotherOperand
        : elseBranch(
          argument,
        );
    
    // After:
    condition
        ? thenBranch +
              anotherOperand
        : elseBranch(
            argument,
          );
    
  • Block format record types in typedefs:

    // Before:
    typedef ExampleRecordTypedef =
        (
          String firstParameter,
          int secondParameter,
          String thirdParameter,
          String fourthParameter,
        );
    
    // After:
    typedef ExampleRecordTypedef = (
      String firstParameter,
      int secondParameter,
      String thirdParameter,
      String fourthParameter,
    );
    
  • Eagerly split argument lists whose contents are complex enough to be easier to read spread across multiple lines even if they would otherwise fit on a single line.

    The heuristic is that the argument list must contain at least three named arguments, some of which are nested and some of which are not.

    // Before:
    TabBar(tabs: [Tab(text: 'A'), Tab(text: 'B')], labelColor: Colors.white70);
    
    // After:
    TabBar(
      tabs: [
        Tab(text: 'A'),
        Tab(text: 'B'),
      ],
      labelColor: Colors.white70,
    );
    

v3.7.3

Compare Source

Released on: 2025-04-16

This is a patch release that:

  • Fixes a performance regression in the analysis server (issue #​60335).

v3.7.2

Compare Source

Released on: 2025-03-12

This is a patch release that:

  • Fixes a bug in dart2wasm that imports a js-string builtin function with a non-nullable parameter type where it must use a nullable one (issue #​59899).

v3.7.1

Compare Source

Released on: 2025-02-26

This is a patch release that:

  • Fixes a bug in the DevTools network profiler that was causing network traffic to be dropped (issue #​8888).
  • Fixes a bug in DDC that prevents code from compiling when it includes factory constructors containing generic local functions (issue #​160338).
  • Fixes a bug in the CFE that didn't correctly mark wildcard variables in formal parameters, causing the wildcard variables to appear in variable lists while debugging (issue #​60121).

v3.7.0

Compare Source

Released on: 2025-02-12

Language

Dart 3.7 adds wildcard variables and inference using bounds 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 can be 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:

Foo(_, this._, super._, void _()) {}

void main() {
  var _ = 1;
  int _ = 2;

  list.where((_) => true);
}
Inference using bounds

With the inference using bounds feature, Dart's type inference algorithm generates constraints by combining existing constraints with the declared type bounds, not just best-effort approximations.

This is especially important for F-bounded types, where inference using bounds correctly infers that, in the example below, X can be bound to B. Without the feature, the type argument must be specified explicitly: f<B>(C()):

class A<X extends A<X>> {}

class B extends A<B> {}

class C extends B {}

void f<X extends A<X>>(X x) {}

void main() {
  f(B()); // OK.

  // OK with this feature. Without it, inference fails after detecting
  // that C is not a subtype of A<C>.
  f(C());

  f<B>(C()); // OK.
}

The feature is described in more details in the inference using bounds specification.

Other language changes
  • Breaking Change #​56893: If a field is promoted to the type Null using is or as, this type promotion is now properly accounted for in reachability 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
  • Add a new 'Go to imports' command to find the import directives that export a declaration.
  • Assists and quick fixes that add an import now consider the prefer_relative_imports and always_use_package_imports lint rules.
  • Add a new fix that converts a ~/ operation into /, when the ~/ operation is not available.
  • Add a fix that wraps an expression in await if the expression is currently not assignable, but awaiting it would make it assignable.
  • Assists and quick fixes that convert a forEach call into a for-loop now consider the prefer_final_in_for_each and always_specify_types lint rules.
  • Add an additional fix to correct a cascade_invocations lint rule violation.
  • Offer additional assists to wrap a Flutter widget with an Expanded widget, and with a Flexible widget.
  • Offer an assist to "inline" an else-block's inner if-statement with the else-block to read else if.
  • Add a fix to use_decorated_box by swapping the Container with ColoredBox as suggested by the lint.
  • Add an additional fix to import an unknown prefixed identifier by updating the show combinator on an existing import.
  • Add a fix to import an unknown prefixed identifier by adding an import directive with the given prefix.
  • Add a fix to import an unknown prefixed identifier by removing a hide combinator.
  • Add a fix to import an unknown identifier by adding an import directive with a show combinator, and optionally a prefix.
  • Code completion now suggests instance variables when completing inside the initializer of a late field.
  • Assists and quick fixes that add a const keyword now consider the prefer_const_declarations lint rule, preferring to add const to a variable declaration rather than the initial value.
  • Add a fix to add a missing on keyword in an extension declaration.
  • Add a fix to wrap an ambiguous property access or method call in an extension override. (Thanks @​FMorschel for the above enhancements!
  • The 'sort members' command now considers the sort_constructors_first lint rule.
  • The 'extract method' refactoring now uses generic method syntax for function-typed parameters.
  • Add quick fixes for more than 30 diagnostics.
  • Add the strict_top_level_inference lint rule.
  • Add the unnecessary_underscores lint rule.
  • Add the experimental specify_nonobvious_property_types lint rule.
  • Add the experimental omit_obvious_property_types lint rule.
  • Add the experimental unnecessary_async lint rule.
  • Add the experimental unsafe_variance lint rule.
  • Remove the package_api_docs lint rule.
  • Remove the 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 of each 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 other dart commands) looks for a package_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 format checks 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:

    formatter:
      page_width: 123
    

    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 globally set the page width for an entire directory, package, or even collection of packages. Since analysis_options.yaml files already support an include key to reference other analysis_options.yaml files, you can define a single configuration 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:

    main() {
      this.isFormatted();
      // dart format off
      no   +   formatting
        +
          here;
      // dart format on
      formatting.isBackOnHere();
    }
    

    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:

    // dart format width=30
    main() {
      someExpression +
          thatSplitsAt30;
    }
    

    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 their preferred page width (or do nothing and continue to use the default page width of 80).

  • Breaking change: Remove support for dart format --fix. Instead, use dart fix. It supports all of the fixes that dart format --fix could apply and 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, then that 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 input using the latest language version supported by the formatter.

    If --stdin-name and --language-version are both omitted, then the formatter parses stdin using the latest supported language version.

  • Rename the --line-length option to --page-width. This is consistent with 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, but may 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 will likely 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 and package:build_web_compiler depend on it. The AOT snapshot can be used as follows to run DDC:

<dart-sdk>/bin/dartaotruntime <dart-sdk>/bin/snapshots/dartdevc_aot.dart.snapshot <options>
Libraries
dart:html
  • dart:html is marked deprecated and will be removed in an upcoming release. Users should migrate to using dart:js_interop and package:web. See #​59716.
dart:indexed_db
  • dart:indexed_db is marked deprecated and will be removed in an upcoming release. Users should migrate to using dart:js_interop and package:web. See #​59716.
dart:io
  • HttpException will be thrown by HttpClient and HttpServer if a NUL (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 and package:web. See #​59716.
dart:web_audio
  • dart:web_audio is marked deprecated and will be removed in an upcoming release. Users should migrate to using dart:js_interop and package: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 and package: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 upcoming release. Users should migrate to using dart:js_interop. See #​59716.

v3.6.2

Compare Source

Released on: 2025-01-30

  • Fixes a bug where HttpServer responses were not correctly encoded if a "Content-Type" header was set (issue #​59719).
  • Fix dart format to parse code at language version 3.6 so that digit separators can be parsed correctly (issue #​59815, dart_style issue #​1630).
  • Fixes an issue where the DevTools analytics did not distinguish between new and legacy inspector events (issue #​59884).
  • When running dart fix on a folder that contains a library with multiple files 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

  • When inside a pub workspace, pub get will now delete stray .dart_tool/package_config.json files in directories between the workspace root and workspace directories. Preventing confusing behavior when migrating a repository to pub workspaces (issue pub#4445).
  • Fixes crash during AOT and dart2wasm compilation which was caused by the incorrect generic covariant field in a constant object (issue #​57084).
  • Fixes analysis options discovery in the presence of workspaces (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.

100__000_000__000_000__000_000  // one hundred million million millions!
0x4000_0000_0000_0000
0.000_000_000_01
0x00_14_22_01_23_45  // MAC address

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 the e in scientific notation.

  • Breaking Change #​56065: The context used by the compiler and analyzer to perform type inference on the operand of a throw expression has been changed from the "unknown type" to Object. This makes the type system more self-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, which has been deprecated since Dart 3.1.

  • Breaking Change #​53618: HttpClient now responds to a redirect that is missing a "Location" header by throwing RedirectException, instead of StateError.

dart:js_interop
  • Added constructors for JSArrayBuffer, JSDataView, and concrete typed array types e.g. JSInt8Array.
  • Added length and []/[]= operators to JSArray.
  • Added toJSCaptureThis so this is passed in from JavaScript to the callback as the first parameter.
  • Added a static from method on JSArray to create a JSArray from a given JavaScript iterable or array-like object.
Tools
CFE
  • Breaking Change #​56466: The implementation of the UP and 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
  • Preserve type parameters on old-style function-typed formals that also use this. or super..
  • Correctly format imports with both as and if clauses.
Wasm compiler (dart2wasm)
  • The condition dart.library.js is now false on conditional imports in dart2wasm. 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 current package.

    For example: dart pub bump minor will change the version from 1.2.3 to 1.3.0.

  • New validation: dart pub publish will warn if your git status is not clean.

  • New flag dart pub upgrade --unlock-transitive.

  • dart pub upgrade --unlock-transitive pkg, will unlock and upgrade all the dependencies of pkg instead of just pkg.

Analyzer

v3.5.4

Compare Source

v3.5.3

Compare Source

  • Fixes an issue with the DevTools Memory tool causing OOMs. and an issue resulting in a missing tab bar when DevTools is embedded in IntelliJ and Android Studio (issue#​56607).
  • Fixes an issue with the DevTools release notes showing each time DevTools is opened instead of only the first time (issue#​56607).
  • Fixes an issue resulting in a missing tab bar when DevTools is embedded in IntelliJ and Android Studio (issue#​56607).

v3.5.2

Compare Source

  • Fixes a bug where ZLibDecoder would incorrectly attempt to decompress data past the end of the zlib footer (issue #​56481).
  • Fixes issue where running dart from PATH could result in some commands not working as expected (issues #​56080, #​56306, #​56499).
  • Fixes analysis server plugins not receiving setContextRoots requests or being provided incorrect context roots in multi-package workspaces (issue #​56475).

v3.5.1

Compare Source

  • Fixes resolving include: in analysis_options.yaml file in a nested folder in the workspace (issue[#​56464][]).
  • Fixes source maps generated by dart compile wasm when optimizations are enabled (issue [#​56423][]).
  • Fixes a bug in the dart2wasm compiler in unsound -O3 / -O4 modes where a implicit setter for a field of generic type will store null instead of the field value (issue [#​56374][]).
  • Fixes a bug in the dart2wasm compiler that can trigger in certain situations when using partial instantiations of generic tear-offs (constructors or static methods) in constant expressions (issue [#​56440][]).
  • The algorithm for computing the standard upper bound of two types, also known is UP, is provided the missing implementation

Configuration

📅 Schedule: Branch creation - At any time (no schedule defined), 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 these updates again.


  • [ ] If you want to rebase/retry this PR, check this box

This PR was generated by Mend Renovate. View the repository job log.

renovate[bot] avatar Aug 22 '23 18:08 renovate[bot]

⚠ Artifact update problem

Renovate failed to update artifacts related to this branch. You probably do not want to merge this PR as-is.

♻ Renovate will retry this branch, including artifacts, only when one of the following happens:

  • any of the package files in this branch needs updating, or
  • the branch becomes conflicted, or
  • you click the rebase/retry checkbox if found above, or
  • you rename this PR's title to start with "rebase!" to trigger it manually

The artifact failure details are included below:

File name: xbox_controller/pubspec.lock
Command failed: docker run --rm --name=renovate_a_sidecar --label=renovate_a_child --memory=3584m -v "/tmp/worker/54929b/2c33ff/repos/github/go-flutter-desktop/examples":"/tmp/worker/54929b/2c33ff/repos/github/go-flutter-desktop/examples" -v "/tmp/worker/54929b/2c33ff/cache":"/tmp/worker/54929b/2c33ff/cache" -e CONTAINERBASE_CACHE_DIR -w "/tmp/worker/54929b/2c33ff/repos/github/go-flutter-desktop/examples/xbox_controller" ghcr.io/containerbase/sidecar:9.13.1 bash -l -c "install-tool flutter 3.13.0 && flutter pub get --no-precompile"
Downloading Linux x64 Dart SDK from Flutter engine 1ac611c64eadbd93c5f5aba5494b8fc3b35ee952...
Building flutter tool...
pubspec.yaml has no lower-bound SDK constraint.
You should edit pubspec.yaml to contain an SDK constraint:

environment:
  sdk: '^3.1.0'

See https://dart.dev/go/sdk-constraint

File name: texture_tutorial/pubspec.lock
Command failed: docker run --rm --name=renovate_a_sidecar --label=renovate_a_child --memory=3584m -v "/tmp/worker/54929b/2c33ff/repos/github/go-flutter-desktop/examples":"/tmp/worker/54929b/2c33ff/repos/github/go-flutter-desktop/examples" -v "/tmp/worker/54929b/2c33ff/cache":"/tmp/worker/54929b/2c33ff/cache" -e CONTAINERBASE_CACHE_DIR -w "/tmp/worker/54929b/2c33ff/repos/github/go-flutter-desktop/examples/texture_tutorial" ghcr.io/containerbase/sidecar:9.13.1 bash -l -c "install-tool flutter 3.13.0 && flutter pub get --no-precompile"
Downloading Linux x64 Dart SDK from Flutter engine 1ac611c64eadbd93c5f5aba5494b8fc3b35ee952...
Building flutter tool...
pubspec.yaml has no lower-bound SDK constraint.
You should edit pubspec.yaml to contain an SDK constraint:

environment:
  sdk: '^3.1.0'

See https://dart.dev/go/sdk-constraint

File name: text_demo/pubspec.lock
Command failed: docker run --rm --name=renovate_a_sidecar --label=renovate_a_child --memory=3584m -v "/tmp/worker/54929b/2c33ff/repos/github/go-flutter-desktop/examples":"/tmp/worker/54929b/2c33ff/repos/github/go-flutter-desktop/examples" -v "/tmp/worker/54929b/2c33ff/cache":"/tmp/worker/54929b/2c33ff/cache" -e CONTAINERBASE_CACHE_DIR -w "/tmp/worker/54929b/2c33ff/repos/github/go-flutter-desktop/examples/text_demo" ghcr.io/containerbase/sidecar:9.13.1 bash -l -c "install-tool flutter 3.13.0 && flutter pub get --no-precompile"
Downloading Linux x64 Dart SDK from Flutter engine 1ac611c64eadbd93c5f5aba5494b8fc3b35ee952...
Building flutter tool...
pubspec.yaml has no lower-bound SDK constraint.
You should edit pubspec.yaml to contain an SDK constraint:

environment:
  sdk: '^3.1.0'

See https://dart.dev/go/sdk-constraint

File name: stocks/pubspec.lock
Command failed: docker run --rm --name=renovate_a_sidecar --label=renovate_a_child --memory=3584m -v "/tmp/worker/54929b/2c33ff/repos/github/go-flutter-desktop/examples":"/tmp/worker/54929b/2c33ff/repos/github/go-flutter-desktop/examples" -v "/tmp/worker/54929b/2c33ff/cache":"/tmp/worker/54929b/2c33ff/cache" -e CONTAINERBASE_CACHE_DIR -w "/tmp/worker/54929b/2c33ff/repos/github/go-flutter-desktop/examples/stocks" ghcr.io/containerbase/sidecar:9.13.1 bash -l -c "install-tool flutter 3.13.0 && flutter pub get --no-precompile"
Downloading Linux x64 Dart SDK from Flutter engine 1ac611c64eadbd93c5f5aba5494b8fc3b35ee952...
Building flutter tool...
pubspec.yaml has no lower-bound SDK constraint.
You should edit pubspec.yaml to contain an SDK constraint:

environment:
  sdk: '^3.1.0'

See https://dart.dev/go/sdk-constraint

File name: pointer_demo/pubspec.lock
Command failed: docker run --rm --name=renovate_a_sidecar --label=renovate_a_child --memory=3584m -v "/tmp/worker/54929b/2c33ff/repos/github/go-flutter-desktop/examples":"/tmp/worker/54929b/2c33ff/repos/github/go-flutter-desktop/examples" -v "/tmp/worker/54929b/2c33ff/cache":"/tmp/worker/54929b/2c33ff/cache" -e CONTAINERBASE_CACHE_DIR -w "/tmp/worker/54929b/2c33ff/repos/github/go-flutter-desktop/examples/pointer_demo" ghcr.io/containerbase/sidecar:9.13.1 bash -l -c "install-tool flutter 3.13.0 && flutter pub get --no-precompile"
Downloading Linux x64 Dart SDK from Flutter engine 1ac611c64eadbd93c5f5aba5494b8fc3b35ee952...
Building flutter tool...
pubspec.yaml has no lower-bound SDK constraint.
You should edit pubspec.yaml to contain an SDK constraint:

environment:
  sdk: '^3.1.0'

See https://dart.dev/go/sdk-constraint

File name: plugin_tutorial/pubspec.lock
Command failed: docker run --rm --name=renovate_a_sidecar --label=renovate_a_child --memory=3584m -v "/tmp/worker/54929b/2c33ff/repos/github/go-flutter-desktop/examples":"/tmp/worker/54929b/2c33ff/repos/github/go-flutter-desktop/examples" -v "/tmp/worker/54929b/2c33ff/cache":"/tmp/worker/54929b/2c33ff/cache" -e CONTAINERBASE_CACHE_DIR -w "/tmp/worker/54929b/2c33ff/repos/github/go-flutter-desktop/examples/plugin_tutorial" ghcr.io/containerbase/sidecar:9.13.1 bash -l -c "install-tool flutter 3.13.0 && flutter pub get --no-precompile"
Downloading Linux x64 Dart SDK from Flutter engine 1ac611c64eadbd93c5f5aba5494b8fc3b35ee952...
Building flutter tool...
pubspec.yaml has no lower-bound SDK constraint.
You should edit pubspec.yaml to contain an SDK constraint:

environment:
  sdk: '^3.1.0'

See https://dart.dev/go/sdk-constraint

File name: keyboard_event/pubspec.lock
Command failed: docker run --rm --name=renovate_a_sidecar --label=renovate_a_child --memory=3584m -v "/tmp/worker/54929b/2c33ff/repos/github/go-flutter-desktop/examples":"/tmp/worker/54929b/2c33ff/repos/github/go-flutter-desktop/examples" -v "/tmp/worker/54929b/2c33ff/cache":"/tmp/worker/54929b/2c33ff/cache" -e CONTAINERBASE_CACHE_DIR -w "/tmp/worker/54929b/2c33ff/repos/github/go-flutter-desktop/examples/keyboard_event" ghcr.io/containerbase/sidecar:9.13.1 bash -l -c "install-tool flutter 3.13.0 && flutter pub get --no-precompile"
Downloading Linux x64 Dart SDK from Flutter engine 1ac611c64eadbd93c5f5aba5494b8fc3b35ee952...
Building flutter tool...
pubspec.yaml has no lower-bound SDK constraint.
You should edit pubspec.yaml to contain an SDK constraint:

environment:
  sdk: '^3.1.0'

See https://dart.dev/go/sdk-constraint

File name: draggable_borderless/pubspec.lock
Command failed: docker run --rm --name=renovate_a_sidecar --label=renovate_a_child --memory=3584m -v "/tmp/worker/54929b/2c33ff/repos/github/go-flutter-desktop/examples":"/tmp/worker/54929b/2c33ff/repos/github/go-flutter-desktop/examples" -v "/tmp/worker/54929b/2c33ff/cache":"/tmp/worker/54929b/2c33ff/cache" -e CONTAINERBASE_CACHE_DIR -w "/tmp/worker/54929b/2c33ff/repos/github/go-flutter-desktop/examples/draggable_borderless" ghcr.io/containerbase/sidecar:9.13.1 bash -l -c "install-tool flutter 3.13.0 && flutter pub get --no-precompile"
Downloading Linux x64 Dart SDK from Flutter engine 1ac611c64eadbd93c5f5aba5494b8fc3b35ee952...
Building flutter tool...
pubspec.yaml has no lower-bound SDK constraint.
You should edit pubspec.yaml to contain an SDK constraint:

environment:
  sdk: '^3.1.0'

See https://dart.dev/go/sdk-constraint

renovate[bot] avatar Aug 22 '23 18:08 renovate[bot]

⚠️ Artifact update problem

Renovate failed to update artifacts related to this branch. You probably do not want to merge this PR as-is.

♻ Renovate will retry this branch, including artifacts, only when one of the following happens:

  • any of the package files in this branch needs updating, or
  • the branch becomes conflicted, or
  • you click the rebase/retry checkbox if found above, or
  • you rename this PR's title to start with "rebase!" to trigger it manually

The artifact failure details are included below:

File name: draggable_borderless/pubspec.lock
Command failed: flutter pub get --no-precompile
The current Dart SDK version is 3.10.0-290.4.beta.

Because draggable_borderless requires SDK version 3.10.0, version solving failed.


You can try the following suggestion to make the pubspec resolve:
* Try using the Flutter SDK version: 3.38.0. 
Failed to update packages.

File name: keyboard_event/pubspec.lock
Command failed: flutter pub get --no-precompile
The current Dart SDK version is 3.10.0-290.4.beta.

Because keyboard_event requires SDK version 3.10.0, version solving failed.


You can try the following suggestion to make the pubspec resolve:
* Try using the Flutter SDK version: 3.38.0. 
Failed to update packages.

File name: plugin_tutorial/pubspec.lock
Command failed: flutter pub get --no-precompile
The current Dart SDK version is 3.10.0-290.4.beta.

Because plugin_tutorial requires SDK version 3.10.0, version solving failed.


You can try the following suggestion to make the pubspec resolve:
* Try using the Flutter SDK version: 3.38.0. 
Failed to update packages.

File name: pointer_demo/pubspec.lock
Command failed: flutter pub get --no-precompile
The current Dart SDK version is 3.10.0-290.4.beta.

Because pointer_demo requires SDK version 3.10.0, version solving failed.


You can try the following suggestion to make the pubspec resolve:
* Try using the Flutter SDK version: 3.38.0. 
Failed to update packages.

File name: stocks/pubspec.lock
Command failed: flutter pub get --no-precompile
The current Dart SDK version is 3.10.0-290.4.beta.

Because stocks requires SDK version 3.10.0, version solving failed.


You can try the following suggestion to make the pubspec resolve:
* Try using the Flutter SDK version: 3.38.0. 
Failed to update packages.

File name: text_demo/pubspec.lock
Command failed: flutter pub get --no-precompile
The current Dart SDK version is 3.10.0-290.4.beta.

Because text_demo requires SDK version 3.10.0, version solving failed.


You can try the following suggestion to make the pubspec resolve:
* Try using the Flutter SDK version: 3.38.0. 
Failed to update packages.

File name: texture_tutorial/pubspec.lock
Command failed: flutter pub get --no-precompile
The current Dart SDK version is 3.10.0-290.4.beta.

Because texture_tutorial requires SDK version 3.10.0, version solving failed.


You can try the following suggestion to make the pubspec resolve:
* Try using the Flutter SDK version: 3.38.0. 
Failed to update packages.

File name: xbox_controller/pubspec.lock
Command failed: flutter pub get --no-precompile
The current Dart SDK version is 3.10.0-290.4.beta.

Because xbox_controller requires SDK version 3.10.0, version solving failed.


You can try the following suggestion to make the pubspec resolve:
* Try using the Flutter SDK version: 3.38.0. 
Failed to update packages.

renovate[bot] avatar Aug 04 '25 21:08 renovate[bot]