A Dart package that contains tools to work with asynchronous computations.
Latest commit f500b18 Jan 5, 2018 @nex3 nex3 Fix a StreamQueue bug (#44)
Previously, StreamQueueTransaction assumed that its request was the
oldest request in the queue at the time at which it was committed or
rejected. This assumption wasn't always correct, and this change
avoids making it.
Failed to load latest commit information.
lib Fix a StreamQueue bug (#44) Jan 5, 2018
test Fix a StreamQueue bug (#44) Jan 5, 2018
.test_config Use the new test runner on the bots. Jul 17, 2015
.travis.yml Update travis to run only on dev, pub get fails on stable Jan 2, 2018
CONTRIBUTING.md Update project to match OSS template Feb 24, 2015
LICENSE Update project to match OSS template Feb 24, 2015
README.md Update the README. (#17) Jan 24, 2017
analysis_options.yaml Rename .analysis_options to analysis_options.yaml Oct 19, 2017
codereview.settings Update project to match OSS template Feb 24, 2015
pubspec.yaml Fix a StreamQueue bug (#44) Jan 5, 2018


Contains utility classes in the style of dart:async to work with asynchronous computations.

  • The AsyncCache class allows expensive asynchronous computations values to be cached for a period of time.

  • The AsyncMemoizer class makes it easy to only run an asynchronous operation once on demand.

  • The CancelableOperation class defines an operation that can be canceled by its consumer. The producer can then listen for this cancellation and stop producing the future when it's received. It can be created using a CancelableCompleter.

  • The delegating wrapper classes allow users to easily add functionality on top of existing instances of core types from dart:async. These include DelegatingFuture, DelegatingStream, DelegatingStreamSubscription, DelegatingStreamConsumer, DelegatingSink, DelegatingEventSink, and DelegatingStreamSink.

    The delegating classes all have .typed() constructors which allow users to cast the generic type parameters in a way that's safe for strong mode. For example, if future is a Future<dynamic> and you know it actually contains an int, you can write DelegatingFuture.typed<int>(future).

  • The FutureGroup class makes it easy to wait until a group of features that may change over time completes.

  • The LazyStream class allows a stream to be initialized lazily when .listen() is first called.

  • The NullStreamSink class is an implementation of StreamSink that discards all events.

  • The RestartableTimer class extends Timer with a reset() method.

  • The Result class that can hold either a value or an error. It provides various utilities for converting to and from Futures and Streams.

  • The StreamGroup class merges a collection of streams into a single output stream.

  • The StreamQueue class allows a stream to be consumed event-by-event rather than being pushed whichever events as soon as they arrive.

  • The StreamSplitter class allows a stream to be duplicated into multiple identical streams.

  • The StreamZip class combines multiple streams into a single stream of lists of events.

  • This package contains a number of StreamTransformers. SingleSubscriptionTransformer converts a broadcast stream to a single-subscription stream, and typedStreamTransformer casts the type of a Stream. It also defines a transformer type for StreamSinks, StreamSinkTransformer.

  • The SubscriptionStream class wraps a StreamSubscription so it can be re-used as a Stream.