From fe0a669cc9d1319d9833ae4b10c1e5700eaa7726 Mon Sep 17 00:00:00 2001 From: LongCatIsLooong <31859944+LongCatIsLooong@users.noreply.github.com> Date: Mon, 2 Mar 2020 09:54:02 -0800 Subject: [PATCH] fix sign (#51679) --- .../flutter/lib/src/rendering/sliver.dart | 2 +- .../flutter/test/rendering/slivers_test.dart | 30 +++++++++++++++++++ 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/packages/flutter/lib/src/rendering/sliver.dart b/packages/flutter/lib/src/rendering/sliver.dart index c7b92014db..6653b8c6e2 100644 --- a/packages/flutter/lib/src/rendering/sliver.dart +++ b/packages/flutter/lib/src/rendering/sliver.dart @@ -859,7 +859,7 @@ class SliverHitTestResult extends HitTestResult { assert(crossAxisPosition != null); assert(hitTest != null); if (paintOffset != null) { - pushTransform(Matrix4.translationValues(paintOffset.dx, paintOffset.dy, 0)); + pushTransform(Matrix4.translationValues(-paintOffset.dx, -paintOffset.dy, 0)); } final bool isHit = hitTest( this, diff --git a/packages/flutter/test/rendering/slivers_test.dart b/packages/flutter/test/rendering/slivers_test.dart index 75a3340bb4..20123dd218 100644 --- a/packages/flutter/test/rendering/slivers_test.dart +++ b/packages/flutter/test/rendering/slivers_test.dart @@ -921,6 +921,36 @@ void main() { mainAxisPositions.clear(); crossAxisPositions.clear(); }); + + test('addWithAxisOffset with non zero paintOffset', () { + final SliverHitTestResult result = SliverHitTestResult(); + double recordedMainAxisPosition; + double recordedCrossAxisPosition; + final HitTestEntry entry = HitTestEntry(_DummyHitTestTarget()); + const Offset paintOffset = Offset(7, 11); + + final bool isHit = result.addWithAxisOffset( + paintOffset: paintOffset, + mainAxisOffset: 5.0, + crossAxisOffset: 6.0, + mainAxisPosition: 10.0, + crossAxisPosition: 20.0, + hitTest: (SliverHitTestResult result, { double mainAxisPosition, double crossAxisPosition }) { + expect(result, isNotNull); + recordedMainAxisPosition = mainAxisPosition; + recordedCrossAxisPosition = crossAxisPosition; + result.add(entry); + return true; + }, + ); + expect(isHit, isTrue); + expect(recordedMainAxisPosition, 10.0 - 5.0); + expect(recordedCrossAxisPosition, 20.0 - 6.0); + expect( + entry.transform..translate(paintOffset.dx, paintOffset.dy), + Matrix4.identity(), + ); + }); }); test('SliverConstraints check for NaN on all double properties', () {