Skip to content

Commit 6806884

Browse files
authored
Fix scrollbar track offset (#106835)
1 parent 0eed9ad commit 6806884

File tree

2 files changed

+36
-4
lines changed

2 files changed

+36
-4
lines changed

packages/flutter/lib/src/widgets/scrollbar.dart

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -488,7 +488,7 @@ class ScrollbarPainter extends ChangeNotifier implements CustomPainter {
488488
trackSize = Size(thickness + 2 * crossAxisMargin, _trackExtent);
489489
x = crossAxisMargin + padding.left;
490490
y = _thumbOffset;
491-
trackOffset = Offset(x - crossAxisMargin, mainAxisMargin);
491+
trackOffset = Offset(x - crossAxisMargin, mainAxisMargin + padding.top);
492492
borderStart = trackOffset + Offset(trackSize.width, 0.0);
493493
borderEnd = Offset(trackOffset.dx + trackSize.width, trackOffset.dy + _trackExtent);
494494
break;
@@ -497,7 +497,7 @@ class ScrollbarPainter extends ChangeNotifier implements CustomPainter {
497497
trackSize = Size(thickness + 2 * crossAxisMargin, _trackExtent);
498498
x = size.width - thickness - crossAxisMargin - padding.right;
499499
y = _thumbOffset;
500-
trackOffset = Offset(x - crossAxisMargin, mainAxisMargin);
500+
trackOffset = Offset(x - crossAxisMargin, mainAxisMargin + padding.top);
501501
borderStart = trackOffset;
502502
borderEnd = Offset(trackOffset.dx, trackOffset.dy + _trackExtent);
503503
break;
@@ -506,7 +506,7 @@ class ScrollbarPainter extends ChangeNotifier implements CustomPainter {
506506
trackSize = Size(_trackExtent, thickness + 2 * crossAxisMargin);
507507
x = _thumbOffset;
508508
y = crossAxisMargin + padding.top;
509-
trackOffset = Offset(mainAxisMargin, y - crossAxisMargin);
509+
trackOffset = Offset(mainAxisMargin + padding.left, y - crossAxisMargin);
510510
borderStart = trackOffset + Offset(0.0, trackSize.height);
511511
borderEnd = Offset(trackOffset.dx + _trackExtent, trackOffset.dy + trackSize.height);
512512
break;
@@ -515,7 +515,7 @@ class ScrollbarPainter extends ChangeNotifier implements CustomPainter {
515515
trackSize = Size(_trackExtent, thickness + 2 * crossAxisMargin);
516516
x = _thumbOffset;
517517
y = size.height - thickness - crossAxisMargin - padding.bottom;
518-
trackOffset = Offset(mainAxisMargin, y - crossAxisMargin);
518+
trackOffset = Offset(mainAxisMargin + padding.left, y - crossAxisMargin);
519519
borderStart = trackOffset;
520520
borderEnd = Offset(trackOffset.dx + _trackExtent, trackOffset.dy);
521521
break;

packages/flutter/test/widgets/scrollbar_test.dart

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2565,4 +2565,36 @@ void main() {
25652565

25662566
// Go without throw.
25672567
});
2568+
2569+
testWidgets('Track offset respects padding', (WidgetTester tester) async {
2570+
// Regression test for https://github.com/flutter/flutter/issues/106834
2571+
final ScrollController scrollController = ScrollController();
2572+
await tester.pumpWidget(
2573+
Directionality(
2574+
textDirection: TextDirection.ltr,
2575+
child: MediaQuery(
2576+
data: const MediaQueryData(
2577+
padding: EdgeInsets.all(50.0),
2578+
),
2579+
child: RawScrollbar(
2580+
controller: scrollController,
2581+
minThumbLength: 21,
2582+
minOverscrollLength: 8,
2583+
thumbVisibility: true,
2584+
child: SingleChildScrollView(
2585+
controller: scrollController,
2586+
child: const SizedBox(width: 1000.0, height: 50000.0),
2587+
),
2588+
),
2589+
)
2590+
)
2591+
);
2592+
await tester.pumpAndSettle();
2593+
expect(
2594+
find.byType(RawScrollbar),
2595+
paints
2596+
..rect(rect: const Rect.fromLTRB(744.0, 50.0, 750.0, 550.0)) // track
2597+
..rect(rect: const Rect.fromLTRB(744.0, 50.0, 750.0, 71.0))
2598+
); // thumb
2599+
});
25682600
}

0 commit comments

Comments
 (0)