child argument contains the default image widget and is guaranteed to
be non-null. Typically, this builder will wrap the
child widget in some
way and return the wrapped widget. If this builder returns
it will yield the same result as if Image.frameBuilder was null.
frame argument specifies the index of the current image frame being
rendered. It will be null before the first image frame is ready, and zero
for the first image frame. For single-frame images, it will never be greater
than zero. For multi-frame images (such as animated GIFs), it will increase
by one every time a new image frame is shown (including when the image
animates in a loop).
wasSynchronouslyLoaded argument specifies whether the image was
available synchronously (on the same
rendering pipeline frame as the
Image widget itself was created) and thus able to be painted immediately.
If this is false, then there was one or more rendering pipeline frames where
the image wasn't yet available to be painted. For multi-frame images (such
as animated GIFs), the value of this argument will be the same for all image
frames. In other words, if the first image frame was available immediately,
then this argument will be true for all image frames.
This builder must not return null.
typedef ImageFrameBuilder = Widget Function( BuildContext context, Widget child, int frame, bool wasSynchronouslyLoaded, );