lerp method Null safety

ButtonStyle? lerp(
  1. ButtonStyle? a,
  2. ButtonStyle? b,
  3. double t
)

Linearly interpolate between two ButtonStyles.

Implementation

static ButtonStyle? lerp(ButtonStyle? a, ButtonStyle? b, double t) {
  assert (t != null);
  if (a == null && b == null)
    return null;
  return ButtonStyle(
    textStyle: _lerpProperties<TextStyle?>(a?.textStyle, b?.textStyle, t, TextStyle.lerp),
    backgroundColor: _lerpProperties<Color?>(a?.backgroundColor, b?.backgroundColor, t, Color.lerp),
    foregroundColor:  _lerpProperties<Color?>(a?.foregroundColor, b?.foregroundColor, t, Color.lerp),
    overlayColor: _lerpProperties<Color?>(a?.overlayColor, b?.overlayColor, t, Color.lerp),
    shadowColor: _lerpProperties<Color?>(a?.shadowColor, b?.shadowColor, t, Color.lerp),
    surfaceTintColor: _lerpProperties<Color?>(a?.surfaceTintColor, b?.surfaceTintColor, t, Color.lerp),
    elevation: _lerpProperties<double?>(a?.elevation, b?.elevation, t, lerpDouble),
    padding:  _lerpProperties<EdgeInsetsGeometry?>(a?.padding, b?.padding, t, EdgeInsetsGeometry.lerp),
    minimumSize: _lerpProperties<Size?>(a?.minimumSize, b?.minimumSize, t, Size.lerp),
    fixedSize: _lerpProperties<Size?>(a?.fixedSize, b?.fixedSize, t, Size.lerp),
    maximumSize: _lerpProperties<Size?>(a?.maximumSize, b?.maximumSize, t, Size.lerp),
    side: _lerpSides(a?.side, b?.side, t),
    shape: _lerpShapes(a?.shape, b?.shape, t),
    mouseCursor: t < 0.5 ? a?.mouseCursor : b?.mouseCursor,
    visualDensity: t < 0.5 ? a?.visualDensity : b?.visualDensity,
    tapTargetSize: t < 0.5 ? a?.tapTargetSize : b?.tapTargetSize,
    animationDuration: t < 0.5 ? a?.animationDuration : b?.animationDuration,
    enableFeedback: t < 0.5 ? a?.enableFeedback : b?.enableFeedback,
    alignment: AlignmentGeometry.lerp(a?.alignment, b?.alignment, t),
    splashFactory: t < 0.5 ? a?.splashFactory : b?.splashFactory,
  );
}