Fix scrollbar track offset (#106835)
diff --git a/packages/flutter/lib/src/widgets/scrollbar.dart b/packages/flutter/lib/src/widgets/scrollbar.dart
index 5cd7549..9d2144c 100644
--- a/packages/flutter/lib/src/widgets/scrollbar.dart
+++ b/packages/flutter/lib/src/widgets/scrollbar.dart
@@ -488,7 +488,7 @@
trackSize = Size(thickness + 2 * crossAxisMargin, _trackExtent);
x = crossAxisMargin + padding.left;
y = _thumbOffset;
- trackOffset = Offset(x - crossAxisMargin, mainAxisMargin);
+ trackOffset = Offset(x - crossAxisMargin, mainAxisMargin + padding.top);
borderStart = trackOffset + Offset(trackSize.width, 0.0);
borderEnd = Offset(trackOffset.dx + trackSize.width, trackOffset.dy + _trackExtent);
break;
@@ -497,7 +497,7 @@
trackSize = Size(thickness + 2 * crossAxisMargin, _trackExtent);
x = size.width - thickness - crossAxisMargin - padding.right;
y = _thumbOffset;
- trackOffset = Offset(x - crossAxisMargin, mainAxisMargin);
+ trackOffset = Offset(x - crossAxisMargin, mainAxisMargin + padding.top);
borderStart = trackOffset;
borderEnd = Offset(trackOffset.dx, trackOffset.dy + _trackExtent);
break;
@@ -506,7 +506,7 @@
trackSize = Size(_trackExtent, thickness + 2 * crossAxisMargin);
x = _thumbOffset;
y = crossAxisMargin + padding.top;
- trackOffset = Offset(mainAxisMargin, y - crossAxisMargin);
+ trackOffset = Offset(mainAxisMargin + padding.left, y - crossAxisMargin);
borderStart = trackOffset + Offset(0.0, trackSize.height);
borderEnd = Offset(trackOffset.dx + _trackExtent, trackOffset.dy + trackSize.height);
break;
@@ -515,7 +515,7 @@
trackSize = Size(_trackExtent, thickness + 2 * crossAxisMargin);
x = _thumbOffset;
y = size.height - thickness - crossAxisMargin - padding.bottom;
- trackOffset = Offset(mainAxisMargin, y - crossAxisMargin);
+ trackOffset = Offset(mainAxisMargin + padding.left, y - crossAxisMargin);
borderStart = trackOffset;
borderEnd = Offset(trackOffset.dx + _trackExtent, trackOffset.dy);
break;
diff --git a/packages/flutter/test/widgets/scrollbar_test.dart b/packages/flutter/test/widgets/scrollbar_test.dart
index c0ad0a8..a2bf805 100644
--- a/packages/flutter/test/widgets/scrollbar_test.dart
+++ b/packages/flutter/test/widgets/scrollbar_test.dart
@@ -2565,4 +2565,36 @@
// Go without throw.
});
+
+ testWidgets('Track offset respects padding', (WidgetTester tester) async {
+ // Regression test for https://github.com/flutter/flutter/issues/106834
+ final ScrollController scrollController = ScrollController();
+ await tester.pumpWidget(
+ Directionality(
+ textDirection: TextDirection.ltr,
+ child: MediaQuery(
+ data: const MediaQueryData(
+ padding: EdgeInsets.all(50.0),
+ ),
+ child: RawScrollbar(
+ controller: scrollController,
+ minThumbLength: 21,
+ minOverscrollLength: 8,
+ thumbVisibility: true,
+ child: SingleChildScrollView(
+ controller: scrollController,
+ child: const SizedBox(width: 1000.0, height: 50000.0),
+ ),
+ ),
+ )
+ )
+ );
+ await tester.pumpAndSettle();
+ expect(
+ find.byType(RawScrollbar),
+ paints
+ ..rect(rect: const Rect.fromLTRB(744.0, 50.0, 750.0, 550.0)) // track
+ ..rect(rect: const Rect.fromLTRB(744.0, 50.0, 750.0, 71.0))
+ ); // thumb
+ });
}