A widget for Flutter that displays a placeholder
widget while a specified image
loads, then cross-fades to the loaded image. Also handles progress and errors. It uses Image.opacity
when appropriate for improved performance.
If image
is changed, it will cross-fade to the new image once it is finished loading. Setting image
to null
will cross-fade back to the placeholder.
You can set duration
and curve
, as well as most Image
properties:
width
, height
, fit
, alignment
, repeat
, matchTextDirection
, excludeFromSemantics
and semanticLabel
.
Use loadingBuilder
and errorBuilder
to display load progress or error states. Optionally specify syncDuration
to
use a different (usually faster) duration for fading in a synchronously loaded image, error, or placeholder.
ImageFade(
// whenever the image changes, it will be loaded, and then faded in:
image: NetworkImage(url),
// slow fade for newly loaded images:
duration: const Duration(milliseconds: 900),
// if the image is loaded synchronously (ex. from memory), fade in faster:
syncDuration: const Duration(milliseconds: 150),
// supports most properties of Image:
alignment: Alignment.center,
fit: BoxFit.cover,
// shown behind everything:
placeholder: Container(
color: const Color(0xFFCFCDCA),
alignment: Alignment.center,
child: const Icon(Icons.photo, color: Colors.white30, size: 128.0),
),
// shows progress while loading an image:
loadingBuilder: (context, progress, chunkEvent) =>
Center(child: CircularProgressIndicator(value: progress)),
// displayed when an error occurs:
errorBuilder: (context, error) => Container(
color: const Color(0xFF6F6D6A),
alignment: Alignment.center,
child: const Icon(Icons.warning, color: Colors.black26, size: 128.0),
),
)
ImageFade is compatible with CachedNetworkImageProvider
.
The published version of this package is availble on pub.dev.
See the example directory for a simple example.