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,
    ),
  );
}