NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
pub.dev · #5 most downloaded on pub.dev
Annotations used to express developer intentions that can't otherwise be deduced by statically analyzing source code.
Last release 3 months ago
09 Jul 2026
Release timing varies
gaps range from 2 weeks to 8 months
Most releases are documented
notes for 40 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
14 years old
119 releases · first in 2012
Breaking change - infer generic type arguments from the constructor invocation arguments (SDK issue 25220).
dartfmt - upgraded to v0.2.9+1
Pub
Added a --no-packages-dir flag to pub get, pub upgrade, and
pub downgrade. When this flag is passed, pub will not generate a
packages/ directory, and will remove that directory and any symlinks to it
if they exist. Note that this replaces the unsupported
--no-package-symlinks flag.
Added the ability for packages to declare a constraint on the Flutter SDK:
environment:
flutter: ^0.1.2
sdk: >=1.19.0 <2.0.0
A Flutter constraint will only be satisfiable when pub is running in the
context of the flutter executable, and when the Flutter SDK version
matches the constraint.
Added sdk as a new package source that fetches packages from a hard-coded
SDK. Currently only the flutter SDK is supported:
dependencies:
flutter_driver:
sdk: flutter
version: ^0.0.1
A Flutter sdk dependency will only be satisfiable when pub is running in
the context of the flutter executable, and when the Flutter SDK contains a
package with the given name whose version matches the constraint.
tar files on Linux are now created with 0 as the user and group IDs.
This fixes a crash when publishing packages while using Active Directory.
Fixed a bug where packages from a hosted HTTP URL were considered the same as packages from an otherwise-identical HTTPS URL.
Fixed timer formatting for timers that lasted longer than a minute.
Eliminate some false negatives when determining whether global executables are on the user's executable path.
dart2js
dart2dart (aka dart2js --output-type=dart) has been removed (this was
deprecated in Dart 1.11).New feature - an option to disable implicit casts (SDK issue 26583), see the documentation for usage instructions and examples.
New feature - an option to disable implicit dynamic (SDK issue 25573), see the documentation for usage instructions and examples.
Breaking change - infer generic type arguments from the constructor invocation arguments (SDK issue 25220).
var map = new Map<String, String>();
// infer: Map<String, String>
var otherMap = new Map.from(map);
Breaking change - infer local function return type (SDK issue 26414).
void main() {
// infer: return type is int
f() { return 40; }
int y = f() + 2; // type checks
print(y);
}
Breaking change - allow type promotion from a generic type parameter (SDK issue 26414).
void fn/*<T>*/(/*=T*/ object) {
if (object is String) {
// Treat `object` as `String` inside this block.
// But it will require a cast to pass it to something that expects `T`.
print(object.substring(1));
}
}
Breaking change - smarter inference for Future.then (SDK issue
25944). Previous workarounds
that use async/await or .then/*<Future<SomeType>>*/ should no longer be
necessary.
// This will now infer correctly.
Future<List<int>> t2 = f.then((_) => [3]);
// This infers too.
Future<int> t2 = f.then((_) => new Future.value(42));
Breaking change - smarter inference for async functions (SDK issue 25322).
void test() async {
List<int> x = await [4]; // was previously inferred
List<int> y = await new Future.value([4]); // now inferred too
}
Breaking change - sideways casts are no longer allowed (SDK issue 26120).
One column per quarter.
@RecordUse() and @mustBeConst annotations are no longer considered
experimental.One new TargetKind is introduced: TargetKind.importDirective, which indicates an annotation is valid on an import directive.
TargetKind.importDirective, which
indicates an annotation is valid on an import directive.Change private types in the public API signatures to Object.
Object.visibleForTesting documentation match actual behavior:
The annotated member can be used in the test/ directory of other packages.Patch release, resolves two issues and improves performance:
Improved performance when parsing some common URIs.
dart:core
Uri.resolve (SDK issue
26804).dart:io
FileLock.BLOCKING_SHARED and
FileLock.BLOCKING_EXCLUSIVE.@redeclare annotation is no longer considered experimental.TargetKind.exportDirective, which
indicates an annotation is valid on an export directive, and
TargetKind.partOfDirective, which indicates an annotation is valid on a
"part of" directive.TargetKind.directive value is deprecated in favor of the above new
TargetKinds and the existing TargetKind.library.Deprecate ChunkedConverter which was erroneously added in 1.16.
dart:convert
ChunkedConverter which was erroneously added in 1.16.dart:core
Uri.replace supports iterables as values for the query parameters.Uri.parseIPv6Address returns a Uint8List.dart:io
NetworkInterface.listSupported, which is true when
NetworkInterface.list is supported, and false otherwise. Currently,
NetworkInterface.list is not supported on Android.Pub
TAR files created while publishing a package on Mac OS and Linux now use a more portable format.
Errors caused by invalid arguments now print the full usage information for the command.
SDK constraints for dependency overrides are no longer considered when determining the total SDK constraint for a lockfile.
A bug has been fixed in which a lockfile was considered up-to-date when it actually wasn't.
A bug has been fixed in which pub get --offline would crash when a
prerelease version was selected.
Dartium and content shell
Introduce @awaitNotRequired to annotate Future-returning functions and
Future-typed fields and top-level variables whose value does not
necessarily need to be awaited. This annotation can be used to suppress
unawaited_futures and discarded_futures lint diagnostics at call sites.
For example, this log function returns a Future, but maybe the return
value is typically not important, and is only useful in tests or while
debugging:
@awaitNotRequired Future<LogMessage> log(String message) { ... }
void fn() {
log('Message'); // Not important to wait for logging to complete.
}
Without the annotation on log, the analyzer may report a lint diagnostic at
the call to log, such as unawaited_futures or discarded_futures
regarding the danger of not awaiting the function call, depending on what
lint rules are enabled.
Mark Required and required as @Deprecated.
Update SDK constraints to ^3.5.0.
There have been a number of BREAKING changes to align APIs with recent changes in Chrome. These include:
dart:convert
Added BASE64URL codec and corresponding Base64Codec.urlSafe constructor.
Introduce ChunkedConverter and deprecate chunked methods on Converter.
dart:html
There have been a number of BREAKING changes to align APIs with recent changes in Chrome. These include:
Chrome's ShadowRoot interface no longer has the methods getElementById,
getElementsByClassName, and getElementsByTagName, e.g.,
elem.shadowRoot.getElementsByClassName('clazz')
should become:
elem.shadowRoot.querySelectorAll('.clazz')
The clipboardData property has been removed from KeyEvent and Event.
It has been moved to the new ClipboardEvent class, which is now used by
copy, cut, and paste events.
The layer property has been removed from KeyEvent and UIEvent. It has
been moved to MouseEvent.
The Point get page property has been removed from UIEvent. It still
exists on MouseEvent and Touch.
There have also been a number of other additions and removals to dart:html,
dart:indexed_db, dart:svg, dart:web_audio, and dart:web_gl that
correspond to changes to Chrome APIs between v39 and v45. Many of the breaking
changes represent APIs that would have caused runtime exceptions when compiled
to JavaScript and run on recent Chrome releases.
dart:io
SecurityContext.alpnSupported, which is true if a platform supports
ALPN, and false otherwise.For performance reasons, a potentially BREAKING change was added for
libraries that use JS interop. Any Dart file that uses @JS annotations on
declarations (top-level functions, classes or class members) to interop with
JavaScript code will require that the file have the annotation @JS() on a
library directive.
@JS()
library my_library;
The analyzer will enforce this by generating the error:
The @JS() annotation can only be used if it is also declared on the library
directive.
If part file uses the @JS() annotation, the library that uses the part should
have the @JS() annotation e.g.,
// library_1.dart
@JS()
library library_1;
import 'package:js/js.dart';
part 'part_1.dart';
// part_1.dart
part of library_1;
@JS("frameworkStabilizers")
external List<FrameworkStabilizer> get frameworkStabilizers;
If your library already has a JS module e.g.,
@JS('array.utils')
library my_library;
Then your library will work without any additional changes.
Static checking of for in statements. These will now produce static
warnings:
// Not Iterable.
for (var i in 1234) { ... }
// String cannot be assigned to int.
for (int n in <String>["a", "b"]) { ... }
Pub
pub serve now provides caching headers that should improve the performance
of requesting large files multiple times.
Both pub get and pub upgrade now have a --no-precompile flag that
disables precompilation of executables and transformed dependencies.
pub publish now resolves symlinks when publishing from a Git repository.
This matches the behavior it always had when publishing a package that
wasn't in a Git repository.
Dart Dev Compiler
The experimental dartdevc executable has been added to the SDK.
It will help early adopters validate the implementation and provide
feedback. dartdevc is not yet ready for production usage.
Read more about the Dart Dev Compiler here.
Add TargetKinds to a few annotations to match custom-wired behavior that the
Dart analyzer has been providing:
@factory is only used on methods.@Immutable is only used on classes, extensions, and mixins.@mustBeOverridden and @mustCallSuper are only used on
overridable members.@sealed is only used on classes.Updated @doNotSubmit to (1) disallow same-library access (unlike other
visibility annotation), (2) allow parameters marked with @doNotSubmit to be
used in nested functions, and (3) disallowed @doNotSubmit on required
parameters:
import 'package:meta/meta.dart';
@doNotSubmit
void a() {}
void b() {
// HINT: invalid_use_of_do_not_submit: ...
a();
}
import 'package:meta/meta.dart';
void test({
@doNotSubmit bool solo = false
}) {
void nested() {
// OK
if (solo) { /*...*/ }
}
}
import 'package:meta/meta.dart';
void test({
// HINT: Cannot use on required parameters.
@doNotSubmit required bool solo
}) {}
See https://github.com/dart-lang/sdk/issues/55558 for more information.
TargetKind.parameter is now allowed on a representation type, such as:
// Ok, because `int _actual` is similar to a parameter declaration.
extension type const FancyInt(@mustBeConst int _actual) {}
Renamed @ResourceIdentifier to @RecordUse.
Made StreamView class a const class.
dart:async
StreamView class a const class.dart:core
Uri.queryParametersAll to handle multiple query parameters with the
same name.dart:io
SecurityContext.usePrivateKeyBytes,
SecurityContext.useCertificateChainBytes,
SecurityContext.setTrustedCertificatesBytes, and
SecurityContext.setClientAuthoritiesBytes.directory argument of
SecurityContext.setTrustedCertificates has been removed.SecurityContext for PKCS12 certificate and key
containers.SecurityContext that accept certificate data now accept an
optional named parameter password, similar to
SecurityContext.usePrivateKeyBytes, for use as the password for PKCS12
data.Dartium and content shell
dart:html, dart:svg, etc) have not been
updated.
Element.animate.dartfmt - upgraded to v0.2.4
extensionRPCs in Isolate was not
marked optional.Added support for
configuration-specific imports.
On the VM and dart2js, they can be enabled with --conditional-directives.
The analyzer requires additional configuration:
analyzer:
language:
enableConditionalDirectives: true
Read about configuring the analyzer for more details.
Updated @mustBeOverridden to only flag missing overrides in concrete
classes; in other words, abstract classes (including implicitly abstract, i.e
sealed) and mixin declarations are no longer required to provide an
implementation:
import 'package:meta/meta.dart';
abstract class Base {
@mustBeOverridden
void foo() {}
}
class Derived extends Base {
// ERROR: Missing implementation of `foo`.
}
abstract class Abstract extends Base {
// No error.
}
sealed class Sealed extends Base {
// No error.
}
mixin Mixin on Base {
// No error.
}
See https://github.com/dart-lang/sdk/issues/52965 for more information.
Introduce TargetKind.optionalParameter, to indicate that an annotation is
valid on any optional parameter declaration.
Introduce TargetKind.overridableMember, to indicate that an annotation is
valid on any instance member declaration.
Introduce TargetKind.instanceMember, to indicate that an annotation is valid
on any instance member declaration.
Updated @doNotSubmit to (1) disallow same-library access (unlike other
visibility annotation), (2) allow parameters marked with @doNotSubmit to be
used in nested functions, and (3) disallowed @doNotSubmit on required
parameters:
import 'package:meta/meta.dart';
@doNotSubmit
void a() {}
void b() {
// HINT: invalid_use_of_do_not_submit: ...
a();
}
import 'package:meta/meta.dart';
void test({
@doNotSubmit bool solo = false
}) {
void nested() {
// OK
if (solo) { /*...*/ }
}
}
import 'package:meta/meta.dart';
void test({
// HINT: Cannot use on required parameters.
@doNotSubmit required bool solo
}) {}
See https://github.com/dart-lang/sdk/issues/55558 for more information.
Added Future.any static method.
dart:async
Future.any static method.Stream.fromFutures constructor.dart:convert
Base64Decoder.convert now takes optional start and end parameters.dart:core
current getter to StackTrace class.Uri class added support for data URIs
dataFromBytes and dataFromString.data getter for data: URIs with a new UriData class for the
return type.growable parameter to List.filled constructor.DateTime: DateTime.microsecond,
DateTime.microsecondsSinceEpoch, and
new DateTime.fromMicrosecondsSinceEpoch.dart:math
Random added a secure constructor returning a cryptographically secure
random generator which reads from the entropy source provided by the
embedder for every generated random value.dart:io
Platform added a static isIOS getter and Platform.operatingSystem may
now return ios.Platform added a static packageConfig getter.compression on the methods
WebSocket.connect, WebSocket.fromUpgradedSocket, and
WebSocketTransformer.upgrade and the WebSocketTransformer constructor
can be used to modify or disable compression using the new
CompressionOptions class.dart:isolate
packageConfig and packageRoot instance getters to Isolate.resolvePackageUri method to Isolate.packageConfig and automaticPackageResolution to
the Isolate.spawnUri constructor.dartfmt
Better line splitting in a variety of cases.
Other optimizations and bug fixes.
Pub
Breaking: Pub now eagerly emits an error when a pubspec's "name" field
is not a valid Dart identifier. Since packages with non-identifier names
were never allowed to be published, and some of them already caused crashes
when being written to a .packages file, this is unlikely to break many
people in practice.
Breaking: Support for barback versions prior to 0.15.0 (released July
pub serve now GZIPs the assets it serves to make load times more similar
to real-world use-cases.
pub deps now supports a --no-dev flag, which causes it to emit the
dependency tree as it would be if no dev_dependencies were in use. This
makes it easier to see your package's dependency footprint as your users
will experience it.
pub global run now detects when a global executable's SDK constraint is no
longer met and errors out, rather than trying to run the executable anyway.
Pub commands that check whether the lockfile is up-to-date (pub run,
pub deps, pub serve, and pub build) now do additional verification.
They ensure that any path dependencies' pubspecs haven't been changed, and
they ensure that the current SDK version is compatible with all
dependencies.
Fixed a crashing bug when using pub global run on a global script that
didn't exist.
Fixed a crashing bug when a pubspec contains a dependency without a source declared.
Introduce TargetKind.constructor, to indicate that an annotation is valid on
any constructor declaration.
Introduce TargetKind.directive, to indicate that an annotation is valid on
any directive.
Introduce TargetKind.enumValue, to indicate that an annotation is valid on
any enum value declaration.
Introduce TargetKind.typeParameter, to indicate that an annotation is valid
on any type parameter declaration.
Introduce @doNotSubmit to annotate members that should not be accessed in
checked-in code, typically because they are intended to be used ephemerally
during development.
One example is package:test's solo: ... parameter, which skips all other
tests in a test suite when set to true. This parameter is useful during
development, but should be prevented from being submitted:
import 'package:meta/meta.dart';
void test(
String name,
void Function() body, {
@doNotSubmit bool solo = false
}) {
// ...
}
import 'package:test/test.dart';
void main() {
test(
'my test', () {
// ...
},
// HINT: invalid_use_of_do_not_submit: ...
solo: true,
);
}
Introduce @mustBeConst to annotate parameters which only accept constant
arguments.
docgen and dartdocgen have been deprecated. Currently plan is to remove them in 1.13.
??: if null operator. expr1 ?? expr2 evaluates to expr1 if not null,
otherwise expr2.??=: null-aware assignment. v ??= expr causes v to be assigned expr
only if v is null.x?.p: null-aware access. x?.p evaluates to x.p if x is not null,
otherwise evaluates to null.x?.m(): null-aware method invocation. x?.m() invokes m only if x is
not null.dart:async
StreamController added setters for the onListen, onPause, onResume
and onCancel callbacks.dart:convert
LineSplitter added a split static method returning an Iterable.dart:core
Uri class now perform path normalization when a URI is created. This
removes most .. and . sequences from the URI path. Purely relative paths
(no scheme or authority) are allowed to retain some leading "dot" segments.
Also added hasAbsolutePath, hasEmptyPath, and hasScheme properties.dart:developer
log function to transmit logging events to Observatory.dart:html
NodeTreeSanitizer added the const trusted field. It can be used instead
of defining a NullTreeSanitizer class when calling setInnerHtml or other
methods that create DOM from text. It is also more efficient, skipping the
creation of a DocumentFragment.dart:io
dart:isolate
onError, onExit and errorsAreFatal parameters to
Isolate.spawnUri.dart:mirrors
InstanceMirror.delegate moved up to ObjectMirror.Documentation tools
dartdoc is now the default tool to generate static HTML for API docs.
Learn more.
docgen and dartdocgen have been deprecated. Currently plan is to remove
them in 1.13.
Formatter (dartfmt)
Over 50 bugs fixed.
Optimized line splitter is much faster and produces better output on complex code.
Observatory
Allocation profiling.
New feature to display output from logging.
Heap snapshot analysis works for 64-bit VMs.
Improved ability to inspect typed data, regex and compiled code.
Ability to break on all or uncaught exceptions from Observatory's debugger.
Ability to set closure-specific breakpoints.
'anext' - step past await/yield.
Preserve when a variable has been expanded/unexpanded in the debugger.
Keep focus on debugger input box whenever possible.
Echo stdout/stderr in the Observatory debugger. Standalone-only so far.
Minor fixes to service protocol documentation.
Pub
Breaking: various commands that previously ran pub get implicitly no
longer do so. Instead, they merely check to make sure the ".packages" file
is newer than the pubspec and the lock file, and fail if it's not.
Added support for --verbosity=error and --verbosity=warning.
pub serve now collapses multiple GET requests into a single line of
output. For full output, use --verbose.
pub deps has improved formatting for circular dependencies on the
entrypoint package.
pub run and pub global run
Breaking: to match the behavior of the Dart VM, executables no longer
run in checked mode by default. A --checked flag has been added to run
them in checked mode manually.
Faster start time for executables that don't import transformed code.
Binstubs for globally-activated executables are now written in the system
encoding, rather than always in UTF-8. To update existing executables,
run pub cache repair.
pub get and pub upgrade
Pub will now generate a ".packages" file in addition to the "packages"
directory when running pub get or similar operations, per the package
spec proposal. Pub now has a --no-package-symlinks flag that will
stop "packages" directories from being generated at all.
An issue where HTTP requests were sometimes made even though --offline
was passed has been fixed.
A bug with --offline that caused an unhelpful error message has been
fixed.
Pub will no longer time out when a package takes a long time to download.
pub publish
Pub will emit a non-zero exit code when it finds a violation while publishing.
.gitignore files will be respected even if the package isn't at the top
level of the Git repository.
Barback integration
A crashing bug involving transformers that only apply to non-public code has been fixed.
A deadlock caused by declaring transformer followed by a lazy transformer
(such as the built-in $dart2js transformer) has been fixed.
A stack overflow caused by a transformer being run multiple times on the package that defines it has been fixed.
A transformer that tries to read a nonexistent asset in another package will now be re-run if that asset is later created.
BREAKING The service protocol now sends JSON-RPC 2.0-compatible server-to-client events. To reflect this, the service protocol version is now 2.0.
The service protocol now includes a "jsonrpc" property in its responses, as
opposed to "json-rpc".
The service protocol now properly handles requests with non-string ids. Numeric ids are no longer converted to strings, and null ids now don't produce a response.
Some RPCs that didn't include a "jsonrpc" property in their responses now
include one.
@ResourceIdentifier experimental annotation for static methods
whose constant literal arguments should be collected during compilation.@required and @Required are set to be deprecated for later
removal.Replaces the deprecated dart:profiler library.
dart:core
Iterable added an empty constructor.
dcf0286Iterable can now be extended directly. An alternative to extending
IterableBase from dart:collection.List added an unmodifiable constructor.
r45334Map added an unmodifiable constructor.
r45733int added a gcd method.
a192ef4int added a modInverse method.
f6f338cStackTrace added a fromString constructor.
68dd6f6Uri added a directory constructor.
d8dbb4aConcurrentModificationError as eagerly in
release mode. In checked mode, the modification check is still as eager as
possible. r45198dart:developer - NEW
dart:profiler library.debugger and inspect.
6e42aecdart:io
dart:html
Element methods, appendHtml and insertAdjacentHtml now take
nodeValidator and treeSanitizer parameters, and the inputs are
consistently sanitized.
r45818 announcementdart:isolate
priority parameter of Isolate.ping and
Isolate.kill is now a named parameter named priority.Isolate.AS_EVENT priority.Isolate methods ping and addOnExitListener now have a named parameter
response. r45092Isolate.spawnUri added a named argument checked.dart:profiler - DEPRECATED
dart:developer instead.dart2js --output-type=dart) utility as part of dart2jsTargetKind.extensionType to indicate that an annotation is valid
on any extension type declaration.POTENTIALLY BREAKING Fix behavior of HtmlEscape. It no longer escapes no-break space (U+00A0) anywhere or forward slash (/, U+002F) in element context
dart:convert
dart:core
Uri.parse added start and end positional arguments.dart:html
CssClassSet method arguments must now be
'tokens', i.e. non-empty strings with no white-space characters. The
implementation was incorrect for class names containing spaces. The fix is
to forbid spaces and provide a faster implementation.
Announcementdart:io
ProcessResult now exposes a constructor.import and Isolate.spawnUri now supports the
Data URI scheme on the VM.Running pub run foo within a package now runs the foo executable defined
by the foo package. The previous behavior ran bin/foo. This makes it easy
to run binaries in dependencies, for instance pub run test.
On Mac and Linux, signals sent to pub run and forwarded to the child
command.
@redeclare to annotate extension type members that redeclare
members from a superinterface.TargetKind enum to a class to ease the addition of new kinds.Deprecation: the experimental ServerSocketReference and RawServerSocketReference classes, as well as getters that returned them, are marked as depreca…
Support for async, await, sync*, async*, yield, yield*, and
await for. See the the language tour for more details.
Enum support is fully enabled. See the language tour for more details.
The formatter is much more comprehensive and generates much more readable code. See its tool page for more details.
The analysis server is integrated into the IntelliJ plugin and the Dart editor. This allows analysis to run out-of-process, so that interaction remains smooth even for large projects.
Analysis supports more and better hints, including unused variables and unused private members.
There's a new model for shared server sockets with no need for a Socket
reference.
A new, much faster regular expression engine.
The Isolate API now works across the VM and dart2js.
For more information on any of these changes, see the corresponding documentation on the Dart API site.
dart:async:
Future.wait added a new named argument, cleanUp, which is a callback
that releases resources allocated by a successful Future.
The SynchronousStreamController class was added as an explicit name for
the type returned when the sync argument is passed to
new StreamController.
dart:collection: The new SplayTreeSet.from(Iterable) constructor was
added.
dart:convert: Utf8Encoder.convert and Utf8Decoder.convert added optional
start and end arguments.
dart:core:
RangeError added new static helper functions: checkNotNegative,
checkValidIndex, checkValidRange, and checkValueInInterval.
int added the modPow function.
String added the replaceFirstMapped and replaceRange functions.
dart:io:
Support for locking files to prevent concurrent modification was added. This
includes the File.lock, File.lockSync, File.unlock, and
File.unlockSync functions as well as the FileLock class.
Support for starting detached processes by passing the named mode argument
(a ProcessStartMode) to Process.start. A process can be fully attached,
fully detached, or detached except for its standard IO streams.
HttpServer.bind and HttpServer.bindSecure added the v6Only named
argument. If this is true, only IPv6 connections will be accepted.
HttpServer.bind, HttpServer.bindSecure, ServerSocket.bind,
RawServerSocket.bind, SecureServerSocket.bind and
RawSecureServerSocket.bind added the shared named argument. If this is
true, multiple servers or sockets in the same Dart process may bind to the
same address, and incoming requests will automatically be distributed
between them.
Deprecation: the experimental ServerSocketReference and
RawServerSocketReference classes, as well as getters that returned them,
are marked as deprecated. The shared named argument should be used
instead. These will be removed in Dart 1.10.
Socket.connect and RawSocket.connect added the sourceAddress named
argument, which specifies the local address to bind when making a
connection.
The static Process.killPid method was added to kill a process with a given
PID.
Stdout added the nonBlocking instance property, which returns a
non-blocking IOSink that writes to standard output.
dart:isolate:
The static getter Isolate.current was added.
The Isolate methods addOnExitListener, removeOnExitListener,
setErrorsFatal, addOnErrorListener, and removeOnErrorListener now work
on the VM.
Isolates spawned via Isolate.spawn now allow most objects, including
top-level and static functions, to be sent between them.
Deprecate @alwaysThrows, which can be replaced by using a return type of 'Never'.
@reopen to annotate class or mixin declarations that can safely
extend classes marked base, final or interface.@MustBeOverridden to annotate class or mixin members which must be
overridden in all subclasses.@alwaysThrows, which can be replaced by using a return type of
'Never'.dart:collection: SplayTree added the toSet function.
dart:collection: SplayTree added the toSet function.
dart:convert: The JsonUtf8Encoder class was added.
dart:core:
The IndexError class was added for errors caused by an index being outside
its expected range.
The new RangeError.index constructor was added. It forwards to
new IndexError.
RangeError added three new properties. invalidProperty is the value that
caused the error, and start and end are the minimum and maximum values
that the value is allowed to assume.
new RangeError.value and new RangeError.range added an optional
message argument.
The new String.fromCharCodes constructor added optional start and end
arguments.
dart:io:
Support was added for the Application-Layer Protocol Negotiation extension to the TLS protocol for both the client and server.
SecureSocket.connect, SecureServerSocket.bind,
RawSecureSocket.connect, RawSecureSocket.secure,
RawSecureSocket.secureServer, and RawSecureServerSocket.bind added a
supportedProtocols named argument for protocol negotiation.
RawSecureServerSocket added a supportedProtocols field.
RawSecureSocket and SecureSocket added a selectedProtocol field which
contains the protocol selected during protocol negotiation.
@UseResult.unless.noInline and tryInline from dart2js.dart has been
changed. This should not affect the use of these annotations in practice.Breaking change: HttpClient.close must be called for all clients or they will keep the Dart process alive until they time out. This fixes the handling…
pub now generates binstubs for packages that are globally activated so that
they can be put on the user's PATH and used as normal executables. See the
pub global activate documentation.
When using dart2js, deferred loading now works with multiple Dart apps on
the same page.
dart:async: Zone, ZoneDelegate, and ZoneSpecification added the
errorCallback function, which allows errors that have been programmatically
added to a Future or Stream to be intercepted.
dart:io:
Breaking change: HttpClient.close must be called for all clients or
they will keep the Dart process alive until they time out. This fixes the
handling of persistent connections. Previously, the client would shut down
immediately after a request.
Breaking change: HttpServer no longer compresses all traffic by
default. The new autoCompress property can be set to true to re-enable
compression.
dart:isolate: Isolate.spawnUri added the optional packageRoot argument,
which controls how it resolves package: URIs.
TargetKindExtension and get displayString.
We published analyzer 1.7.2 that is compatible with TargetKindExtension.Remove TargetKindExtension. Adding it was a breaking change, because there are clients, e.g. analyze 1.7.0, that also declare an extension on TargetKi…
TargetKindExtension. Adding it was a breaking change, because there
are clients, e.g. analyze 1.7.0, that also declare an extension on
TargetKind, and also declare get displayString. This causes a conflict.Add TargetKindExtension.displayString.
TargetKindExtension.displayString.Introduce TargetKind.topLevelVariable that indicates that an annotation is valid on any top-level variable declaration.
TargetKind.topLevelVariable that indicates that an annotation
is valid on any top-level variable declaration.@useResult to annotate methods, fields, or getters that return
values that should be used - stored, passed as arguments, etc.Stable release for null safety.
Update SDK constraints to >=2.12.0-0 <3.0.0 based on beta release guidelines.
>=2.12.0-0 <3.0.0 based on beta release
guidelines.Allow prerelease versions of the 2.12 SDK.
2.12 SDK.Introduce @internal to annotate elements that should not be used outside of the package in which the element is declared.
@internal to annotate elements that should not be used outside of
the package in which the element is declared.Allow 2.10 stable and 2.11.0 dev SDK versions.
- Update for the 2.10 dev SDK.
- Allow the <=2.9.10 stable SDK.
- Opt into null safety.
Nothing published for this version
Nothing published for this version
Removed unawaited because the attempt to move it from package:pedantic caused too many issues. If you see errors about unawaited being declared in two
unawaited because the attempt to move it from package:pedantic
caused too many issues. If you see errors about unawaited being declared in
two places, please update the version constraints for meta to 1.2.2 or
later.Fixed a bug by adding an import of dart:async so that the code really is compatible with the lower bound of the SDK constraints.
Introduce unawaited to mark invocations that return a Future where it's intentional that the future is not being awaited. (Moved from package:pedantic
unawaited to mark invocations that return a Future where it's
intentional that the future is not being awaited. (Moved from
package:pedantic.)@doNotStore to annotate methods, getters and functions to indicate
that values obtained by invoking them should not be stored in a field or
top-level variable.Introduce @nonVirtual to annotate instance members that should not be overridden in subclasses or when mixed in.
@nonVirtual to annotate instance members that should not be
overridden in subclasses or when mixed in.Introduce @sealed to declare that a class or mixin is not allowed as a super-type.
Introduce @sealed to declare that a class or mixin is not allowed as a
super-type.
Only classes in the same package as a class or mixin annotated with @sealed
may extend, implement or mix-in the annotated class or mixin. (SDK issue
27372).
- Set max SDK version to <3.0.0.
Introduce @isTest and @isTestGroup to declare a function that is a test, or a test group.
Rollback SDK constraint update for 2.0.0. No longer needed.
Update SDK constraint to be 2.0.0 dev friendly.
Introduce @alwaysThrows to declare that a function always throws (SDK issue 17999). This is first available in Dart SDK 1.25.0-dev.1.0.
Introduce @alwaysThrows to declare that a function always throws
(SDK issue 17999). This
is first available in Dart SDK 1.25.0-dev.1.0.
import 'package:meta/meta.dart';
// Without knowing that [failBigTime] always throws, it looks like this
// function might return without returning a bool.
bool fn(expected, actual) {
if (expected != actual)
failBigTime(expected, actual);
else
return True;
}
@alwaysThrows
void failBigTime(expected, actual) {
throw new StateError('Expected $expected, but was $actual.');
}
…despite the fact that it would otherwise be a breaking change.
@experimental to annotate a library, or any declaration that is
part of the public interface of a library (such as top-level members, class
members, and function parameters) to indicate that the annotated API is
experimental and may be removed or changed at any-time without updating the
version of the containing package, despite the fact that it would otherwise
be a breaking change.Introduce @virtual to allow field overrides in strong mode (SDK issue 27384).
Introduce @virtual to allow field overrides in strong mode
(SDK issue 27384).
import 'package:meta/meta.dart' show virtual;
class Base {
@virtual int x;
}
class Derived extends Base {
int x;
// Expose the hidden storage slot:
int get superX => super.x;
set superX(int v) { super.x = v; }
}
Introduce @checked to override a method and tighten a parameter type (SDK issue 25578).
Introduce @checked to override a method and tighten a parameter
type (SDK issue 25578).
import 'package:meta/meta.dart' show checked;
class View {
addChild(View v) {}
}
class MyView extends View {
// this override is legal, it will check at runtime if we actually
// got a MyView.
addChild(@checked MyView v) {}
}
main() {
dynamic mv = new MyView();
mv.addChild(new View()); // runtime error
}
Introduce @visibleForTesting annotation for declarations that may be referenced only in the library or in a test.
@visibleForTesting annotation for declarations that may be referenced only in the library or in a test.Updated @factory to allow statics and methods returning null.
@factory to allow statics and methods returning null.- Fixed markdown in dartdocs.
Introduce @optionalTypeArgs annotation for classes whose type arguments are to be treated as optional.
@optionalTypeArgs annotation for classes whose type arguments are to be treated as optional.Added new Required constructor with a means to specify a reason to explain why a parameter is required.
Required constructor with a means to specify a reason to explain why a parameter is required.Introduce @factory annotation for methods that must either be abstract or must return a newly allocated object.
@factory annotation for methods that must either be abstract or must return a newly allocated object.@literal annotation that indicates that any invocation of a
constructor must use the keyword const unless one or more of the
arguments to the constructor is not a compile-time constant.Introduce @protected annotation for members that must only be called from instance members of subclasses.
@protected annotation for members that must only be called from
instance members of subclasses.@required annotation for optional parameters that should be treated
as required.@mustCallSuper annotation for methods that must be invoked by all
overriding methods.Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →