zoomable_imagepackage

dart:async library

Support for asynchronous programming,
with classes such as Future and Stream.

Understanding Futures and Streams is a prerequisite for
writing just about any Dart program.

To use this library in your code:

import 'dart:async';

Future

A Future object represents a computation whose return value
might not yet be available.
The Future returns the value of the computation
when it completes at some time in the future.
Futures are often used for potentially lengthy computations
such as I/O and interaction with users.

Many methods in the Dart libraries return Futures when
performing tasks. For example, when binding an HttpServer
to a host and port, the bind() method returns a Future.

Future.then registers a callback function that runs
when the Future's operation, in this case the bind() method,
completes successfully.
The value returned by the operation
is passed into the callback function.
In this example, the bind() method returns the HttpServer
object. The callback function prints one of its properties.
Future.catchError registers a callback function that
runs if an error occurs within the Future.

Stream

A Stream provides an asynchronous sequence of data.
Examples of data sequences include individual events, like mouse clicks,
or sequential chunks of larger data, like multiple byte lists with the
contents of a file
such as mouse clicks, and a stream of byte lists read from a file.
The following example opens a file for reading.
Stream.listen registers a callback function that runs
each time more data is available.

The stream emits a sequence of a list of bytes.
The program must interpret the bytes or handle the raw byte data.
Here, the code uses a UTF-8 decoder (provided in the dart:convert library)
to convert the sequence of bytes into a sequence
of Dart strings.

Another common use of streams is for user-generated events
in a web app: The following code listens for mouse clicks on a button.