Skip to content

Commit

Permalink
Fix scrollbar track offset (#106835)
Browse files Browse the repository at this point in the history
  • Loading branch information
Piinks committed Jun 30, 2022
1 parent 0eed9ad commit 6806884
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 4 deletions.
8 changes: 4 additions & 4 deletions packages/flutter/lib/src/widgets/scrollbar.dart
Expand Up @@ -488,7 +488,7 @@ class ScrollbarPainter extends ChangeNotifier implements CustomPainter {
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;
Expand All @@ -497,7 +497,7 @@ class ScrollbarPainter extends ChangeNotifier implements CustomPainter {
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;
Expand All @@ -506,7 +506,7 @@ class ScrollbarPainter extends ChangeNotifier implements CustomPainter {
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;
Expand All @@ -515,7 +515,7 @@ class ScrollbarPainter extends ChangeNotifier implements CustomPainter {
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;
Expand Down
32 changes: 32 additions & 0 deletions packages/flutter/test/widgets/scrollbar_test.dart
Expand Up @@ -2565,4 +2565,36 @@ void main() {

// 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
});
}

0 comments on commit 6806884

Please sign in to comment.