fix sign (#51679)
diff --git a/packages/flutter/lib/src/rendering/sliver.dart b/packages/flutter/lib/src/rendering/sliver.dart
index c7b9201..6653b8c 100644
--- a/packages/flutter/lib/src/rendering/sliver.dart
+++ b/packages/flutter/lib/src/rendering/sliver.dart
@@ -859,7 +859,7 @@
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 75a3340..20123dd 100644
--- a/packages/flutter/test/rendering/slivers_test.dart
+++ b/packages/flutter/test/rendering/slivers_test.dart
@@ -921,6 +921,36 @@
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', () {