InkSplash constructor
Begin a splash, centered at position relative to referenceBox
.
The controller
argument is typically obtained via
Material.of(context)
.
If containedInkWell
is true, then the splash will be sized to fit
the well rectangle, then clipped to it when drawn. The well
rectangle is the box returned by rectCallback
, if provided, or
otherwise is the bounds of the referenceBox
.
If containedInkWell
is false, then rectCallback
should be null.
The ink splash is clipped only to the edges of the Material.
This is the default.
When the splash is removed, onRemoved
will be called.
Implementation
InkSplash({
@required MaterialInkController controller,
@required RenderBox referenceBox,
@required TextDirection textDirection,
Offset position,
Color color,
bool containedInkWell = false,
RectCallback rectCallback,
BorderRadius borderRadius,
ShapeBorder customBorder,
double radius,
VoidCallback onRemoved,
}) : assert(textDirection != null),
_position = position,
_borderRadius = borderRadius ?? BorderRadius.zero,
_customBorder = customBorder,
_targetRadius = radius ?? _getTargetRadius(referenceBox, containedInkWell, rectCallback, position),
_clipCallback = _getClipCallback(referenceBox, containedInkWell, rectCallback),
_repositionToReferenceBox = !containedInkWell,
_textDirection = textDirection,
super(controller: controller, referenceBox: referenceBox, color: color, onRemoved: onRemoved) {
assert(_borderRadius != null);
_radiusController = AnimationController(duration: _kUnconfirmedSplashDuration, vsync: controller.vsync)
..addListener(controller.markNeedsPaint)
..forward();
_radius = _radiusController.drive(Tween<double>(
begin: _kSplashInitialSize,
end: _targetRadius,
));
_alphaController = AnimationController(duration: _kSplashFadeDuration, vsync: controller.vsync)
..addListener(controller.markNeedsPaint)
..addStatusListener(_handleAlphaStatusChanged);
_alpha = _alphaController.drive(IntTween(
begin: color.alpha,
end: 0,
));
controller.addInkFeature(this);
}