lerp<T> static method
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),
);
}