CalcThemeData.lerp constructor
CalcThemeData.lerp(
- CalcThemeData a,
- CalcThemeData b,
- double t
Interpolates every channel (t = 0 gives a, 1 gives b). Discrete
values (brightness, fonts, springs) switch at t = 0.5.
Implementation
factory CalcThemeData.lerp(CalcThemeData a, CalcThemeData b, double t) {
if (identical(a, b)) return a;
T pick<T>(T x, T y) => t < 0.5 ? x : y;
Color color(Color x, Color y) => Color.lerp(x, y, t)!;
double number(double x, double y) => lerpDouble(x, y, t)!;
return CalcThemeData(
brightness: pick(a.brightness, b.brightness),
background: color(a.background, b.background),
displayText: color(a.displayText, b.displayText),
previewText: color(a.previewText, b.previewText),
errorText: color(a.errorText, b.errorText),
caret: color(a.caret, b.caret),
focusRing: color(a.focusRing, b.focusRing),
digitKey: KeyStyle.lerp(a.digitKey, b.digitKey, t),
operatorKey: KeyStyle.lerp(a.operatorKey, b.operatorKey, t),
equalsKey: KeyStyle.lerp(a.equalsKey, b.equalsKey, t),
functionKey: KeyStyle.lerp(a.functionKey, b.functionKey, t),
keyCornerFraction: number(a.keyCornerFraction, b.keyCornerFraction),
displayFontFamily: pick(a.displayFontFamily, b.displayFontFamily),
displayWeight: pick(a.displayWeight, b.displayWeight),
keyFontFamily: pick(a.keyFontFamily, b.keyFontFamily),
pressIn: pick(a.pressIn, b.pressIn),
release: pick(a.release, b.release),
releaseAlt: pick(a.releaseAlt, b.releaseAlt),
pressScale: number(a.pressScale, b.pressScale),
pressedOverlayOpacity: number(
a.pressedOverlayOpacity,
b.pressedOverlayOpacity,
),
hoverOverlayOpacity: number(a.hoverOverlayOpacity, b.hoverOverlayOpacity),
keyFace: pick(a.keyFace, b.keyFace),
focusRingWidth: number(a.focusRingWidth, b.focusRingWidth),
backdrop: pick(a.backdrop, b.backdrop),
displayEntry: pick(a.displayEntry, b.displayEntry),
releaseHaptic: pick(a.releaseHaptic, b.releaseHaptic),
displayFace: switch ((a.displayFace, b.displayFace)) {
(final x?, final y?) => x.lerpTo(y, t),
(final x, final y) => pick(x, y),
},
accessiblePreviewText:
a.accessiblePreviewText == null && b.accessiblePreviewText == null
? null
: color(a.secondaryText, b.secondaryText),
chrome: pick(a.chrome, b.chrome),
);
}