diff --git a/packages/flutter/lib/src/rendering/proxy_box.dart b/packages/flutter/lib/src/rendering/proxy_box.dart index ce019a2b03..2a1698e5c8 100644 --- a/packages/flutter/lib/src/rendering/proxy_box.dart +++ b/packages/flutter/lib/src/rendering/proxy_box.dart @@ -1777,6 +1777,9 @@ abstract class CustomPainter { /// point that should be considered outside the painted image, and null to use /// the default behavior. bool hitTest(Point position) => null; + + @override + String toString() => '$runtimeType#$hashCode'; } /// Provides a canvas on which to draw during the paint phase. diff --git a/packages/flutter/lib/src/widgets/overscroll_indicator.dart b/packages/flutter/lib/src/widgets/overscroll_indicator.dart index bffc0ff982..a3f67a1f29 100644 --- a/packages/flutter/lib/src/widgets/overscroll_indicator.dart +++ b/packages/flutter/lib/src/widgets/overscroll_indicator.dart @@ -450,16 +450,15 @@ class _GlowingOverscrollIndicatorPainter extends CustomPainter { break; case AxisDirection.left: canvas.save(); - canvas.translate(0.0, size.height); - canvas.rotate(-piOver2); + canvas.rotate(piOver2); + canvas.scale(1.0, -1.0); controller.paint(canvas, new Size(size.height, size.width)); canvas.restore(); break; case AxisDirection.right: canvas.save(); - canvas.translate(size.width, size.height); - canvas.rotate(-piOver2); - canvas.scale(1.0, -1.0); + canvas.translate(size.width, 0.0); + canvas.rotate(piOver2); controller.paint(canvas, new Size(size.height, size.width)); canvas.restore(); break; diff --git a/packages/flutter/test/widgets/overscroll_indicator_test.dart b/packages/flutter/test/widgets/overscroll_indicator_test.dart index a8b0c85ed5..c479a56258 100644 --- a/packages/flutter/test/widgets/overscroll_indicator_test.dart +++ b/packages/flutter/test/widgets/overscroll_indicator_test.dart @@ -187,11 +187,11 @@ void main() { ); RenderObject painter = tester.renderObject(find.byType(CustomPaint)); await slowDrag(tester, const Point(200.0, 200.0), const Offset(5.0, 0.0)); - expect(painter, paints..rotate(angle: -math.PI / 2.0)..circle()..scale(y: -1.0)); + expect(painter, paints..rotate(angle: math.PI / 2.0)..circle()..saveRestore()); expect(painter, isNot(paints..circle()..circle())); await slowDrag(tester, const Point(200.0, 200.0), const Offset(-5.0, 0.0)); - expect(painter, paints..rotate(angle: -math.PI / 2.0)..circle() - ..rotate(angle: -math.PI / 2.0)..scale(y: -1.0)..circle()); + expect(painter, paints..rotate(angle: math.PI / 2.0)..circle() + ..rotate(angle: math.PI / 2.0)..circle()); await tester.pumpUntilNoTransientCallbacks(const Duration(seconds: 1)); expect(painter, doesNotOverscroll); @@ -237,7 +237,7 @@ void main() { ); painter = tester.renderObject(find.byType(CustomPaint)); await slowDrag(tester, const Point(200.0, 200.0), const Offset(5.0, 0.0)); - expect(painter, paints..scale(y: -1.0)..rotate(angle: -math.PI / 2.0)..circle(color: const Color(0x0A00FF00))); + expect(painter, paints..rotate(angle: math.PI / 2.0)..circle(color: const Color(0x0A00FF00))); expect(painter, isNot(paints..circle()..circle())); await tester.pumpUntilNoTransientCallbacks(const Duration(seconds: 1)); @@ -254,7 +254,7 @@ void main() { ); painter = tester.renderObject(find.byType(CustomPaint)); await slowDrag(tester, const Point(200.0, 200.0), const Offset(5.0, 0.0)); - expect(painter, paints..rotate(angle: -math.PI / 2.0)..circle(color: const Color(0x0A0000FF))..scale(y: -1.0)); + expect(painter, paints..rotate(angle: math.PI / 2.0)..circle(color: const Color(0x0A0000FF))..saveRestore()); expect(painter, isNot(paints..circle()..circle())); }); }