diff --git a/packages/flutter/lib/src/widgets/scrollbar.dart b/packages/flutter/lib/src/widgets/scrollbar.dart index 81e1a7a6d9..26076e590f 100644 --- a/packages/flutter/lib/src/widgets/scrollbar.dart +++ b/packages/flutter/lib/src/widgets/scrollbar.dart @@ -428,37 +428,46 @@ class ScrollbarPainter extends ChangeNotifier implements CustomPainter { final double x, y; final Size thumbSize, trackSize; - final Offset trackOffset; + final Offset trackOffset, borderStart, borderEnd; _debugAssertIsValidOrientation(resolvedOrientation); + switch(resolvedOrientation) { case ScrollbarOrientation.left: thumbSize = Size(thickness, thumbExtent); trackSize = Size(thickness + 2 * crossAxisMargin, _trackExtent); x = crossAxisMargin + padding.left; y = _thumbOffset; - trackOffset = Offset(x - crossAxisMargin, 0.0); + trackOffset = Offset(x - crossAxisMargin, mainAxisMargin); + borderStart = trackOffset + Offset(trackSize.width, 0.0); + borderEnd = Offset(trackOffset.dx + trackSize.width, trackOffset.dy + _trackExtent); break; case ScrollbarOrientation.right: thumbSize = Size(thickness, thumbExtent); trackSize = Size(thickness + 2 * crossAxisMargin, _trackExtent); x = size.width - thickness - crossAxisMargin - padding.right; y = _thumbOffset; - trackOffset = Offset(x - crossAxisMargin, 0.0); + trackOffset = Offset(x - crossAxisMargin, mainAxisMargin); + borderStart = trackOffset; + borderEnd = Offset(trackOffset.dx, trackOffset.dy + _trackExtent); break; case ScrollbarOrientation.top: thumbSize = Size(thumbExtent, thickness); trackSize = Size(_trackExtent, thickness + 2 * crossAxisMargin); x = _thumbOffset; y = crossAxisMargin + padding.top; - trackOffset = Offset(0.0, y - crossAxisMargin); + trackOffset = Offset(mainAxisMargin, y - crossAxisMargin); + borderStart = trackOffset + Offset(0.0, trackSize.height); + borderEnd = Offset(trackOffset.dx + _trackExtent, trackOffset.dy + trackSize.height); break; case ScrollbarOrientation.bottom: thumbSize = Size(thumbExtent, thickness); trackSize = Size(_trackExtent, thickness + 2 * crossAxisMargin); x = _thumbOffset; y = size.height - thickness - crossAxisMargin - padding.bottom; - trackOffset = Offset(0.0, y - crossAxisMargin); + trackOffset = Offset(mainAxisMargin, y - crossAxisMargin); + borderStart = trackOffset; + borderEnd = Offset(trackOffset.dx + _trackExtent, trackOffset.dy); break; } @@ -472,15 +481,10 @@ class ScrollbarPainter extends ChangeNotifier implements CustomPainter { // Track canvas.drawRect(_trackRect!, _paintTrack()); // Track Border - canvas.drawLine( - trackOffset, - Offset(trackOffset.dx, trackOffset.dy + _trackExtent), - _paintTrack(isBorder: true), - ); + canvas.drawLine(borderStart, borderEnd, _paintTrack(isBorder: true)); if (radius != null) { // Rounded rect thumb - canvas.drawRRect( - RRect.fromRectAndRadius(_thumbRect!, radius!), _paintThumb); + canvas.drawRRect(RRect.fromRectAndRadius(_thumbRect!, radius!), _paintThumb); return; } if (shape == null) { diff --git a/packages/flutter/test/cupertino/scrollbar_test.dart b/packages/flutter/test/cupertino/scrollbar_test.dart index 0359f11f5d..cd5ae8d67d 100644 --- a/packages/flutter/test/cupertino/scrollbar_test.dart +++ b/packages/flutter/test/cupertino/scrollbar_test.dart @@ -1112,11 +1112,11 @@ void main() { find.byType(CupertinoScrollbar), paints ..rect( - rect: const Rect.fromLTRB(0.0, 0.0, 9.0, 594.0), + rect: const Rect.fromLTRB(0.0, 3.0, 9.0, 597.0), ) ..line( - p1: Offset.zero, - p2: const Offset(0.0, 594.0), + p1: const Offset(9.0, 3.0), + p2: const Offset(9.0, 597.0), strokeWidth: 1.0, ) ..rrect( diff --git a/packages/flutter/test/material/scrollbar_paint_test.dart b/packages/flutter/test/material/scrollbar_paint_test.dart index 256e594637..42ce23133f 100644 --- a/packages/flutter/test/material/scrollbar_paint_test.dart +++ b/packages/flutter/test/material/scrollbar_paint_test.dart @@ -67,8 +67,8 @@ void main() { color: const Color(0x00000000), ) ..line( - p1: Offset.zero, - p2: const Offset(0.0, 600.0), + p1: const Offset(4.0, 0.0), + p2: const Offset(4.0, 600.0), strokeWidth: 1.0, color: const Color(0x00000000), ) diff --git a/packages/flutter/test/material/scrollbar_test.dart b/packages/flutter/test/material/scrollbar_test.dart index 3bdfd1261e..648d7c1d0b 100644 --- a/packages/flutter/test/material/scrollbar_test.dart +++ b/packages/flutter/test/material/scrollbar_test.dart @@ -1546,8 +1546,8 @@ void main() { color: Colors.transparent, ) ..line( - p1: Offset.zero, - p2: const Offset(0.0, 600.0), + p1: const Offset(4.0, 0.0), + p2: const Offset(4.0, 600.0), strokeWidth: 1.0, color: Colors.transparent, ) diff --git a/packages/flutter/test/material/scrollbar_theme_test.dart b/packages/flutter/test/material/scrollbar_theme_test.dart index 07ad46caa9..7aa97ab380 100644 --- a/packages/flutter/test/material/scrollbar_theme_test.dart +++ b/packages/flutter/test/material/scrollbar_theme_test.dart @@ -174,19 +174,19 @@ void main() { final TestGesture gesture = await tester.createGesture(kind: ui.PointerDeviceKind.mouse); await gesture.addPointer(); addTearDown(gesture.removePointer); - await gesture.moveTo(const Offset(794.0, 5.0)); + await gesture.moveTo(const Offset(794.0, 15.0)); await tester.pumpAndSettle(); expect( find.byType(Scrollbar), paints ..rect( - rect: const Rect.fromLTRB(770.0, 0.0, 800.0, 580.0), + rect: const Rect.fromLTRB(770.0, 10.0, 800.0, 590.0), color: const Color(0xff000000), ) ..line( - p1: const Offset(770.0, 0.0), - p2: const Offset(770.0, 580.0), + p1: const Offset(770.0, 10.0), + p2: const Offset(770.0, 590.0), strokeWidth: 1.0, color: const Color(0xffffeb3b), ) diff --git a/packages/flutter/test/widgets/scrollbar_test.dart b/packages/flutter/test/widgets/scrollbar_test.dart index c84ae71594..b8b2dec544 100644 --- a/packages/flutter/test/widgets/scrollbar_test.dart +++ b/packages/flutter/test/widgets/scrollbar_test.dart @@ -1524,7 +1524,7 @@ void main() { expect( find.byType(RawScrollbar), paints - ..rect(rect: const Rect.fromLTRB(794.0, 0.0, 800.0, 580.0)) + ..rect(rect: const Rect.fromLTRB(794.0, 10.0, 800.0, 590.0)) ..rect(rect: const Rect.fromLTRB(794.0, 10.0, 800.0, 358.0)) ); });