build method
Widget
build(
- BuildContext context,
- Widget child,
- AnimationController controller,
- EffectEntry entry,
override
Builds the widgets that implement the effect on the target child
,
based on the provided AnimationController and EffectEntry.
Implementation
@override
Widget build(
BuildContext context,
Widget child,
AnimationController controller,
EffectEntry entry,
) {
double ratio = 1 / MediaQuery.of(context).devicePixelRatio;
Animation<double> animation = buildAnimation(controller, entry);
return getOptimizedBuilder<double>(
animation: animation,
builder: (_, __) {
return AnimatedSampler(
(ui.Image image, Size size, Canvas canvas) {
ShaderUpdateDetails details = ShaderUpdateDetails(
shader: shader!,
value: animation.value,
size: size,
image: image,
);
EdgeInsets? insets = overflow;
if (update != null) {
insets ??= update!(details);
} else {
details.updateUniforms();
}
Rect rect = Rect.fromLTWH(0, 0, size.width, size.height);
rect = insets?.inflateRect(rect) ?? rect;
drawImage() {
canvas.save();
canvas.scale(ratio, ratio);
canvas.drawImage(image, Offset.zero, Paint());
canvas.restore();
}
if (layer == ShaderLayer.foreground) drawImage();
if (shader != null) canvas.drawRect(rect, Paint()..shader = shader);
if (layer == ShaderLayer.background) drawImage();
},
enabled: shader != null,
child: child,
);
},
);
}