lerp static method
Implementation
static MiniTheme lerp(
MiniTheme a,
MiniTheme b,
double t,
) {
// Use different curves for each token group to make theme transitions
// feel smoother and less mechanical.
final double colorT = Curves.easeInOutCubic.transform(t);
final double spacingT = Curves.easeOutCubic.transform(t);
final double radiusT = Curves.easeOut.transform(t);
final double typographyT = Curves.easeInOut.transform(t);
final double componentSizeT = spacingT;
// Avoid flipping brightness midway; delay it until 0.75 to reduce flicker.
const double brightnessFlipPoint = 0.75;
final Brightness brightness =
t < brightnessFlipPoint ? a.brightness : b.brightness;
return MiniTheme(
name: t < 0.5 ? a.name : b.name,
brightness: brightness,
colors: MiniColorTokens.lerp(a.colors, b.colors, colorT),
spacing: MiniSpacingTokens.lerp(a.spacing, b.spacing, spacingT),
radius: MiniRadiusTokens.lerp(a.radius, b.radius, radiusT),
typography: MiniTypographyTokens.lerp(
a.typography,
b.typography,
typographyT,
),
componentSizes: MiniComponentSizeTokens.lerp(
a.componentSizes,
b.componentSizes,
componentSizeT,
),
);
}