NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
pub.dev · #18 most downloaded on pub.dev
Utility functions and classes related to the 'dart:async' library.
Last release 6 months ago
26 Mar 2026
Release timing varies
gaps range from 3 weeks to 1.6 years
Most releases are documented
notes for 46 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
13 years old
66 releases · first in 2013
Fix StreamGroup.broadcast().close() to properly complete when all streams in the group close without being explicitly removed.
StreamGroup.broadcast().close() to properly complete when all streams in the group close without being explicitly removed.dart format with the new style.StreamGroup.broadcast().close() to properly complete when all streams in
the group close without being explicitly removed.dart format with the new style.fetch method of AsyncCache will store exception or not
by using cacheErrors property.Fix type check and cast in SubscriptionStream's cancelOnError wrapper
One column per quarter.
Move to dart-lang/core monorepo.
dart-lang/core monorepo.Add CancelableOperation.fromValue.
CancelableOperation.fromValue.StreamExtensions.listenAndBuffer, which buffers events from a stream
before it has a listener.Add CancelableOperation.thenOperation which gives more flexibility to complete the resulting operation.
CancelableOperation.thenOperation which gives more flexibility to
complete the resulting operation.CancelableCompleter.completeOperation.Deprecated AsyncCache.fetchStream.
propagateCancel argument to
CancelableOperation.then changed from false to true. In most usages this
won't have a meaningful difference in behavior, but in usages where the
behavior is important propagation is the more common need. If there are any
CancelableOperation with multiple listeners where canceling subsequent
computation using .then shouldn't also cancel the original operation, pass
propagateCancel: false.StreamExtensions.firstOrNull.CancelableOperation.fromSubscription() static factory.CancelableOperation.race() static method.StreamGroup methods that return a Future<dynamic> today to return
a Future<void> instead.AsyncCache.fetchStream.AsyncCache.ephemeral invalidate itself immediately when the returned
future completes, rather than wait for a later timer event.Deprecate EventSinkBase, StreamSinkBase, IOSinkBase.
EventSinkBase, StreamSinkBase, IOSinkBase.Don't ignore broadcast streams added to a StreamGroup that doesn't have an active listener but previously had listeners and contains a single subscrip
StreamGroup that doesn't have an
active listener but previously had listeners and contains a single
subscription inner stream.Add EventSinkBase, StreamSinkBase, and IOSinkBase classes to make it easier to implement custom sinks.
EventSinkBase, StreamSinkBase, and IOSinkBase classes to make it
easier to implement custom sinks.ChunkedStreamReader by creating fewer internal
sublists and specializing to create views for Uint8List chunks.Remove sorting of the allowedHelp argument in usage output. Ordering will depend on key order for the passed Map .
allowedHelp argument in usage output. Ordering willMap.pubspec.yaml.hideNegatedUsage to ArgParser.flag() allowing a flag to benegatable without showing it in the usage text..option().Stream.slices() extension method.CancelableOperation.then may invoke the onValue callback,
even if it had been canceled before CancelableOperation.value completes.CancelableOperation.isComplete where it may appear to be
complete and no longer be cancelable when it in fact could still be canceled.When StreamGroup.stream.listen() is called, gracefully handle component streams throwing errors when their Stream.listen() methods are called.
StreamGroup.stream.listen() is called, gracefully handle component
streams throwing errors when their Stream.listen() methods are called.Add a StreamCloser class, which is a StreamTransformer that allows the caller to force the stream to emit a done event.
StreamCloser class, which is a StreamTransformer that allows the
caller to force the stream to emit a done event.ChunkedStreamReader for reading chunked streams without managing
buffers.StreamSink, including StreamSink.transform() for
applying StreamSinkTransformers and StreamSink.rejectErrors().StreamGroup.isIdle and StreamGroup.onIdle.StreamGroup.isClosed and FutureGroup.isClosed getters.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.Remove the unusable setter CancelableOperation.operation=. This was mistakenly added to the public API but could never be called.
CancelableOperation.operation=. This was
mistakenly added to the public API but could never be called.Allow 2.10 stable and 2.11.0 dev SDK versions.
Migrate this package to null safety.
StreamQueue starts listening immediately to broadcast strings.
StreamQueue starts listening immediately to broadcast strings.Deprecate DelegatingStream.typed. Use Stream.cast instead.
DelegatingStream.typed. Use Stream.cast instead.DelegatingStreamSubcription.typed and
DelegatingStreamConsumer.typed. For each of these the Stream should be
cast to the correct type before being used.DelegatingStreamSink.typed. DelegatingSink.typed,
DelegatingEventSink.typed, DelegatingStreamConsumer.typed. For each of
these a new StreamController can be constructed to forward to the sink.
StreamController<T>()..stream.cast<S>().pipe(sink)typedStreamTransformer. Cast after transforming instead.StreamSinkTransformer.typed since there was no usage.CancelablOperation.fromFuture, indicate that isCompleted
starts true.Add StreamGroup.mergeBroadcast() utility.
StreamGroup.mergeBroadcast() utility.Implement RestartableTimer.tick.
RestartableTimer.tick.Add then to CancelableOperation.
then to CancelableOperation.Fix CancelableOperation.valueOrCancellation's type signature
CancelableOperation.valueOrCancellation's type signatureisCanceled and isCompleted to CancelableOperation.Deprecate DelegatingFuture.typed, it is not necessary in Dart 2.
<3.0.0.DelegatingFuture.typed, it is not necessary in Dart 2.Stop using deprecated constants from the SDK.
Add further support for Dart 2.0 library changes to Stream.
Stream.Fix Dart 2.0 [runtime cast errors][sdk#27223] in StreamQueue.
StreamQueue.Add support for Dart 2.0 library changes to Stream and StreamTransformer. Changed classes that implement StreamTransformer to extend StreamTransformer
Add support for Dart 2.0 library changes to Stream and StreamTransformer.
Changed classes that implement StreamTransformer to extend
StreamTransformerBase, and changed signatures of firstWhere, lastWhere,
and singleWhere on classes extending Stream. See
also issue 31847.
Move to package:web . Require Dart 3.5
package:web.StreamQueue.startTransaction() and related methods when
rejecting a transaction that isn't the oldest request in the queue.Add support for Dart 2.0 library changes to class Timer.
Timer.Fix a fuzzy arrow type warning.
Remove deprecated public result.dart and stream_zip.dart libraries and deprecated classes ReleaseStreamTransformer and CaptureStreamTransformer.
Remove deprecated public result.dart and stream_zip.dart libraries and
deprecated classes ReleaseStreamTransformer and CaptureStreamTransformer.
Add captureAll and flattenList static methods to Result.
Change ErrorResult to not be generic and always be a Result<Null>.
That makes an error independent of the type of result it occurs instead of.
Make TypeSafeStream extend Stream instead of implementing it. This ensures that new methods on Stream are automatically picked up, they will go throug
TypeSafeStream extend Stream instead of implementing it. This ensures
that new methods on Stream are automatically picked up, they will go through
the listen method which type-checks every event.* Fix a type-warning.
Use FutureOr for various APIs that had previously used dynamic.
FutureOr for various APIs that had previously used dynamic.Add collectBytes and collectBytesCancelable functions which collects list-of-byte events into a single byte list.
Add collectBytes and collectBytesCancelable functions which collects
list-of-byte events into a single byte list.
Fix a bug where rejecting a StreamQueueTransaction would throw a
StateError if StreamQueue.rest had been called on one of its child queues.
StreamQueue.withTransaction() now properly returns whether or not the
transaction was committed.
Add an AsyncCache class that caches asynchronous operations for a period of time.
Add an AsyncCache class that caches asynchronous operations for a period of
time.
Add StreamQueue.peek and StreamQueue.lookAheead.
These allow users to look at events without consuming them.
Add StreamQueue.startTransaction() and StreamQueue.withTransaction().
These allow users to conditionally consume events based on their values.
Add StreamQueue.cancelable(), which allows users to easily make a
CancelableOperation that can be canceled without affecting the queue.
Add StreamQueue.eventsDispatched which counts the number of events that have
been dispatched by a given queue.
Add a subscriptionTransformer() function to create StreamTransformers that
modify the behavior of subscriptions to a stream.
Fix strong-mode warning against the signature of Future.then
Nothing published for this version
Fix new strong-mode warnings introduced in Dart 1.17.0.
Add a typedStreamTransformer() function. This wraps an untyped StreamTransformer with the correct type parameters, and asserts the types of events as
Add a typedStreamTransformer() function. This wraps an untyped
StreamTransformer with the correct type parameters, and asserts the types of
events as they're emitted from the transformed stream.
Add a StreamSinkTransformer.typed() static method. This wraps an untyped
StreamSinkTransformer with the correct type parameters, and asserts the
types of arguments passed in to the resulting sink.
…some circumstances, so this is not considered a breaking change.
Add DelegatingFuture.typed(), DelegatingStreamSubscription.typed(),
DelegatingStreamConsumer.typed(), DelegatingSink.typed(),
DelegatingEventSink.typed(), and DelegatingStreamSink.typed() static
methods. These wrap untyped instances of these classes with the correct type
parameter, and assert the types of values as they're accessed.
Add a DelegatingStream class. This is behaviorally identical to StreamView
from dart:async, but it follows this package's naming conventions and
provides a DelegatingStream.typed() static method.
Fix all strong mode warnings and add generic method annotations.
new StreamQueue(), new SubscriptionStream(), new DelegatingStreamSubscription(), new DelegatingStreamConsumer(), new DelegatingSink(), new DelegatingEventSink(), and new DelegatingStreamSink() now take arguments with generic type arguments (for
example Stream<T>) rather than without (for example Stream<dynamic>).
Passing a type that wasn't is-compatible with the fully-specified generic
would already throw an error under some circumstances, so this is not
considered a breaking change.
ErrorResult now takes a type parameter.
Result.asError now returns a Result<T>.
Deprecate top-level libraries other than package:async/async.dart, which exports these libraries' interfaces.
Deprecate top-level libraries other than package:async/async.dart, which
exports these libraries' interfaces.
Add Result.captureStreamTransformer, Result.releaseStreamTransformer,
Result.captureSinkTransformer, and Result.releaseSinkTransformer.
Deprecate CaptureStreamTransformer, ReleaseStreamTransformer,
CaptureSink, and ReleaseSink. Result.captureStreamTransformer,
Result.releaseStreamTransformer, Result.captureSinkTransformer, and
Result.releaseSinkTransformer should be used instead.
Added StreamSinkCompleter, for creating a StreamSink now and providing its destination later as another sink.
Added StreamSinkCompleter, for creating a StreamSink now and providing its
destination later as another sink.
Added StreamCompleter.setError, a shortcut for emitting a single error event
on the resulting stream.
Added NullStreamSink, an implementation of StreamSink that discards all
events.
Added SingleSubscriptionTransformer, a StreamTransformer that converts a broadcast stream into a single-subscription stream.
SingleSubscriptionTransformer, a StreamTransformer that converts a
broadcast stream into a single-subscription stream.Added CancelableOperation.valueOrCancellation(), which allows users to be notified when an operation is canceled elsewhere.
Added CancelableOperation.valueOrCancellation(), which allows users to be
notified when an operation is canceled elsewhere.
Added StreamSinkTransformer which transforms events before they're passed to
a StreamSink, similarly to how StreamTransformer transforms events after
they're emitted by a stream.
Added LazyStream, which forwards to the return value of a callback that's only called when the stream is listened to.
LazyStream, which forwards to the return value of a callback that's
only called when the stream is listened to.Added AsyncMemoizer.future, which allows the result to be accessed before runOnce() is called.
Added AsyncMemoizer.future, which allows the result to be accessed before
runOnce() is called.
Added CancelableOperation, an asynchronous operation that can be canceled.
It can be created using a CancelableCompleter.
Added RestartableTimer, a non-periodic timer that can be reset over and
over.
Added StreamCompleter class for creating a stream now and providing its events later as another stream.
Added StreamCompleter class for creating a stream now and providing its
events later as another stream.
Added StreamQueue class which allows requesting events from a stream
before they are avilable. It is like a StreamIterator that can queue
requests.
Added SubscriptionStream which creates a single-subscription stream
from an existing stream subscription.
Added a ResultFuture class for synchronously accessing the result of a
wrapped future.
Added FutureGroup.onIdle and FutureGroup.isIdle, which provide visibility
into whether a group is actively waiting on any futures.
Add an AsyncMemoizer class for running an asynchronous block of code exactly
once.
Added delegating wrapper classes for a number of core async types:
DelegatingFuture, DelegatingStreamConsumer, DelegatingStreamController,
DelegatingSink, DelegatingEventSink, DelegatingStreamSink, and
DelegatingStreamSubscription. These are all simple wrappers that forward all
calls to the wrapped objects. They can be used to expose only the desired
interface for subclasses, or extended to add extra functionality.
Added a FutureGroup class for waiting for a group of futures, potentially of unknown size, to complete.
Added a FutureGroup class for waiting for a group of futures, potentially of
unknown size, to complete.
Added a StreamGroup class for merging the events of a group of streams,
potentially of unknown size.
Added a StreamSplitter class for splitting a stream into multiple new
streams.
- ChangeLog starts here.
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 →