MultiFrameImageStreamCompleter class

Manages the decoding and scheduling of image frames.

New frames will only be emitted while there are registered listeners to the stream (registered with addListener).

This class deals with 2 types of frames:

  • image frames - image frames of an animated image.
  • app frames - frames that the flutter engine is drawing to the screen to show the app GUI.

For single frame images the stream will only complete once.

For animated images, this class eagerly decodes the next image frame, and notifies the listeners that a new frame is ready on the first app frame that is scheduled after the image frame duration has passed.

Scheduling new timers only from scheduled app frames, makes sure we pause the animation when the app is not visible (as new app frames will not be scheduled).

See the following timeline example:

| Time | Event                                      | Comment                   |
| t1   | App frame scheduled (image frame A posted) |                           |
| t2   | App frame scheduled                        |                           |
| t3   | App frame scheduled                        |                           |
| t4   | Image frame B decoded                      |                           |
| t5   | App frame scheduled                        | t5 - t1 < frameB_duration |
| t6   | App frame scheduled (image frame B posted) | t6 - t1 > frameB_duration |


MultiFrameImageStreamCompleter({@required Future<Codec> codec, @required double scale, InformationCollector informationCollector })
Creates a image stream completer. [...]


hashCode int
The hash code for this object. [...]
read-only, inherited
runtimeType Type
A representation of the runtime type of the object.
read-only, inherited


addListener(ImageListener listener) → void
Adds a listener callback that is called whenever a new concrete ImageInfo object is available. If a concrete image is already available, this object will call the listener synchronously. [...]
removeListener(ImageListener listener) → void
Stop listening for new concrete ImageInfo objects.
debugFillProperties(DiagnosticPropertiesBuilder description) → void
Accumulates a list of strings describing the object's state. Subclasses should override this to have their information included in toString.
noSuchMethod(Invocation invocation) → dynamic
Invoked when a non-existent method or property is accessed. [...]
setImage(ImageInfo image) → void
Calls all the registered listeners to notify them of a new image.
@protected, inherited
toDiagnosticsNode({String name, DiagnosticsTreeStyle style }) DiagnosticsNode
Returns a debug representation of the object that is used by debugging tools and by toStringDeep. [...]
toString({DiagnosticLevel minLevel: DiagnosticLevel.debug }) String
Returns a string representation of this object.
toStringShort() String
A brief description of this object, usually just the runtimeType and the hashCode. [...]


operator ==(dynamic other) bool
The equality operator. [...]