lerp<T> static method

ChildNodeTheme<T> lerp<T>(
  1. ChildNodeTheme<T>? a,
  2. ChildNodeTheme<T>? b,
  3. double t
)

Linearly interpolate between two ChildNodeThemes

Implementation

static ChildNodeTheme<T> lerp<T>(
  ChildNodeTheme<T>? a,
  ChildNodeTheme<T>? b,
  double t,
) {
  if (a == null && b == null) {
    return const ChildNodeTheme();
  }
  if (a == null) return b!;
  if (b == null) return a;

  return ChildNodeTheme<T>(
    widget: t < 0.5 ? a.widget : b.widget,
    widgetResolver: t < 0.5 ? a.widgetResolver : b.widgetResolver,
    width: lerpDouble(a.width, b.width, t) ?? 20.0,
    height: lerpDouble(a.height, b.height, t) ?? 20.0,
    padding: EdgeInsets.lerp(a.padding, b.padding, t) ?? EdgeInsets.zero,
    margin: EdgeInsets.lerp(a.margin, b.margin, t) ?? EdgeInsets.zero,
    textStyle: TextStyle.lerp(a.textStyle, b.textStyle, t),
    textStyleResolver: t < 0.5 ? a.textStyleResolver : b.textStyleResolver,
    labelResolver: t < 0.5 ? a.labelResolver : b.labelResolver,
    selectedTextStyle: TextStyle.lerp(
      a.selectedTextStyle,
      b.selectedTextStyle,
      t,
    ),
    selectedTextStyleResolver: t < 0.5
        ? a.selectedTextStyleResolver
        : b.selectedTextStyleResolver,
    selectedBackgroundColor: Color.lerp(
      a.selectedBackgroundColor,
      b.selectedBackgroundColor,
      t,
    ),
    hoverColor: Color.lerp(a.hoverColor, b.hoverColor, t),
    splashColor: Color.lerp(a.splashColor, b.splashColor, t),
    highlightColor: Color.lerp(a.highlightColor, b.highlightColor, t),
    clickInterval:
        (lerpDouble(
                  a.clickInterval.toDouble(),
                  b.clickInterval.toDouble(),
                  t,
                ) ??
                300)
            .round(),
    tooltipTheme: NodeTooltipTheme.lerp(a.tooltipTheme, b.tooltipTheme, t),
  );
}