Skip to content

Commit 5dbe795

Browse files
committed
Simplify the lerp functionality in GaugePointerPainter
1 parent 909d518 commit 5dbe795

2 files changed

Lines changed: 23 additions & 49 deletions

File tree

lib/src/chart/gauge_chart/gauge_chart_data.dart

Lines changed: 19 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -760,7 +760,7 @@ class GaugePointer with EquatableMixin {
760760
static GaugePointer lerp(GaugePointer a, GaugePointer b, double t) =>
761761
GaugePointer(
762762
value: lerpDouble(a.value, b.value, t)!,
763-
painter: a.painter.lerp(a.painter, b.painter, t),
763+
painter: a.painter.lerp(b.painter, t),
764764
);
765765

766766
@override
@@ -795,11 +795,7 @@ abstract class GaugePointerPainter with EquatableMixin {
795795

796796
/// Lerps two painter configurations. Cross-type lerps fall back to
797797
/// [b], matching [GaugeTickPainter.lerp].
798-
GaugePointerPainter lerp(
799-
GaugePointerPainter a,
800-
GaugePointerPainter b,
801-
double t,
802-
);
798+
GaugePointerPainter lerp(GaugePointerPainter b, double t);
803799
}
804800

805801
/// Default [GaugePointerPainter]: a classic needle shape.
@@ -850,28 +846,17 @@ class GaugePointerNeedlePainter extends GaugePointerPainter {
850846
@override
851847
Size getSize() => Size(length + tailLength, width);
852848

853-
GaugePointerNeedlePainter _lerp(
854-
GaugePointerNeedlePainter a,
855-
GaugePointerNeedlePainter b,
856-
double t,
857-
) =>
858-
GaugePointerNeedlePainter(
859-
length: lerpDouble(a.length, b.length, t)!,
860-
width: lerpDouble(a.width, b.width, t)!,
861-
tailLength: lerpDouble(a.tailLength, b.tailLength, t)!,
862-
color: Color.lerp(a.color, b.color, t)!,
863-
);
864-
865849
@override
866-
GaugePointerPainter lerp(
867-
GaugePointerPainter a,
868-
GaugePointerPainter b,
869-
double t,
870-
) {
871-
if (a is! GaugePointerNeedlePainter || b is! GaugePointerNeedlePainter) {
850+
GaugePointerPainter lerp(GaugePointerPainter b, double t) {
851+
if (b is! GaugePointerNeedlePainter) {
872852
return b;
873853
}
874-
return _lerp(a, b, t);
854+
return GaugePointerNeedlePainter(
855+
length: lerpDouble(length, b.length, t)!,
856+
width: lerpDouble(width, b.width, t)!,
857+
tailLength: lerpDouble(tailLength, b.tailLength, t)!,
858+
color: Color.lerp(color, b.color, t)!,
859+
);
875860
}
876861

877862
@override
@@ -937,29 +922,18 @@ class GaugePointerCirclePainter extends GaugePointerPainter {
937922
return Size(anchorRadius + extent, extent * 2);
938923
}
939924

940-
GaugePointerCirclePainter _lerp(
941-
GaugePointerCirclePainter a,
942-
GaugePointerCirclePainter b,
943-
double t,
944-
) =>
945-
GaugePointerCirclePainter(
946-
radius: lerpDouble(a.radius, b.radius, t)!,
947-
anchorRadius: lerpDouble(a.anchorRadius, b.anchorRadius, t)!,
948-
color: Color.lerp(a.color, b.color, t)!,
949-
strokeWidth: lerpDouble(a.strokeWidth, b.strokeWidth, t)!,
950-
strokeColor: Color.lerp(a.strokeColor, b.strokeColor, t)!,
951-
);
952-
953925
@override
954-
GaugePointerPainter lerp(
955-
GaugePointerPainter a,
956-
GaugePointerPainter b,
957-
double t,
958-
) {
959-
if (a is! GaugePointerCirclePainter || b is! GaugePointerCirclePainter) {
926+
GaugePointerPainter lerp(GaugePointerPainter b, double t) {
927+
if (b is! GaugePointerCirclePainter) {
960928
return b;
961929
}
962-
return _lerp(a, b, t);
930+
return GaugePointerCirclePainter(
931+
radius: lerpDouble(radius, b.radius, t)!,
932+
anchorRadius: lerpDouble(anchorRadius, b.anchorRadius, t)!,
933+
color: Color.lerp(color, b.color, t)!,
934+
strokeWidth: lerpDouble(strokeWidth, b.strokeWidth, t)!,
935+
strokeColor: Color.lerp(strokeColor, b.strokeColor, t)!,
936+
);
963937
}
964938

965939
@override

test/chart/gauge_chart/gauge_chart_data_test.dart

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -544,11 +544,11 @@ void main() {
544544
expect(a.getSize(), const Size(40, 6));
545545

546546
// Cross-type lerp snaps to b.
547-
final fallback = a.lerp(a, const GaugePointerCirclePainter(), 0.2);
547+
final fallback = a.lerp(const GaugePointerCirclePainter(), 0.2);
548548
expect(fallback, isA<GaugePointerCirclePainter>());
549549

550550
// Same-type lerp blends.
551-
final mid = a.lerp(a, c, 0.5) as GaugePointerNeedlePainter;
551+
final mid = a.lerp(c, 0.5) as GaugePointerNeedlePainter;
552552
expect(mid.length, 60);
553553

554554
// Draw emits a single filled triangle path.
@@ -612,12 +612,12 @@ void main() {
612612
expect(withStroke.getSize(), const Size(7, 14));
613613

614614
// Same-type lerp blends fields.
615-
final mid = a.lerp(a, c, 0.5) as GaugePointerCirclePainter;
615+
final mid = a.lerp(c, 0.5) as GaugePointerCirclePainter;
616616
expect(mid.radius, 7);
617617
expect(mid.anchorRadius, 100);
618618

619619
// Cross-type lerp snaps to b.
620-
final fallback = a.lerp(a, const GaugePointerNeedlePainter(), 0.3);
620+
final fallback = a.lerp(const GaugePointerNeedlePainter(), 0.3);
621621
expect(fallback, isA<GaugePointerNeedlePainter>());
622622
});
623623

0 commit comments

Comments
 (0)