@@ -1445,6 +1445,7 @@ void main() {
14451445 ),
14461446 );
14471447 });
1448+
14481449 testWidgets ('ScrollbarPainter asserts if scrollbarOrientation is used with wrong axisDirection' , (WidgetTester tester) async {
14491450 final ScrollbarPainter painter = ScrollbarPainter (
14501451 color: _kScrollbarColor,
@@ -1492,6 +1493,44 @@ void main() {
14921493 ..rect (rect: const Rect .fromLTRB (794.0 , 10.0 , 800.0 , 358.0 ))
14931494 );
14941495 });
1496+
1497+ testWidgets ('shape property of RawScrollbar can draw a BeveledRectangleBorder' , (WidgetTester tester) async {
1498+ final ScrollController scrollController = ScrollController ();
1499+ await tester.pumpWidget (
1500+ Directionality (
1501+ textDirection: TextDirection .ltr,
1502+ child: MediaQuery (
1503+ data: const MediaQueryData (),
1504+ child: RawScrollbar (
1505+ shape: const BeveledRectangleBorder (
1506+ borderRadius: BorderRadius .all (Radius .circular (8.0 ))
1507+ ),
1508+ controller: scrollController,
1509+ isAlwaysShown: true ,
1510+ child: SingleChildScrollView (
1511+ controller: scrollController,
1512+ child: const SizedBox (height: 1000.0 ),
1513+ ),
1514+ ),
1515+ )));
1516+ await tester.pumpAndSettle ();
1517+ expect (
1518+ find.byType (RawScrollbar ),
1519+ paints
1520+ ..rect (rect: const Rect .fromLTRB (794.0 , 0.0 , 800.0 , 600.0 ))
1521+ ..path (
1522+ includes: const < Offset > [
1523+ Offset (797.0 , 0.0 ),
1524+ Offset (797.0 , 18.0 ),
1525+ ],
1526+ excludes: const < Offset > [
1527+ Offset (796.0 , 0.0 ),
1528+ Offset (798.0 , 0.0 ),
1529+ ],
1530+ ),
1531+ );
1532+ });
1533+
14951534 testWidgets ('minThumbLength property of RawScrollbar is respected' , (WidgetTester tester) async {
14961535 final ScrollController scrollController = ScrollController ();
14971536 await tester.pumpWidget (
@@ -1518,6 +1557,42 @@ void main() {
15181557 ..rect (rect: const Rect .fromLTRB (794.0 , 0.0 , 800.0 , 21.0 ))); // thumb
15191558 });
15201559
1560+ testWidgets ('shape property of RawScrollbar can draw a CircleBorder' , (WidgetTester tester) async {
1561+ final ScrollController scrollController = ScrollController ();
1562+ await tester.pumpWidget (
1563+ Directionality (
1564+ textDirection: TextDirection .ltr,
1565+ child: MediaQuery (
1566+ data: const MediaQueryData (),
1567+ child: RawScrollbar (
1568+ shape: const CircleBorder (side: BorderSide (width: 2.0 )),
1569+ thickness: 36.0 ,
1570+ controller: scrollController,
1571+ isAlwaysShown: true ,
1572+ child: SingleChildScrollView (
1573+ controller: scrollController,
1574+ child: const SizedBox (height: 1000.0 , width: 1000 ),
1575+ ),
1576+ ),
1577+ )));
1578+ await tester.pumpAndSettle ();
1579+
1580+ expect (
1581+ find.byType (RawScrollbar ),
1582+ paints
1583+ ..path (
1584+ includes: const < Offset > [
1585+ Offset (782.0 , 180.0 ),
1586+ Offset (782.0 , 180.0 - 18.0 ),
1587+ Offset (782.0 + 18.0 , 180 ),
1588+ Offset (782.0 , 180.0 + 18.0 ),
1589+ Offset (782.0 - 18.0 , 180 ),
1590+ ],
1591+ )
1592+ ..circle (x: 782.0 , y: 180.0 , radius: 17.0 , strokeWidth: 2.0 )
1593+ );
1594+ });
1595+
15211596 testWidgets ('crossAxisMargin property of RawScrollbar is respected' , (WidgetTester tester) async {
15221597 final ScrollController scrollController = ScrollController ();
15231598 await tester.pumpWidget (
@@ -1543,6 +1618,40 @@ void main() {
15431618 ..rect (rect: const Rect .fromLTRB (764.0 , 0.0 , 770.0 , 360.0 )));
15441619 });
15451620
1621+ testWidgets ('shape property of RawScrollbar can draw a RoundedRectangleBorder' , (WidgetTester tester) async {
1622+ final ScrollController scrollController = ScrollController ();
1623+ await tester.pumpWidget (
1624+ Directionality (
1625+ textDirection: TextDirection .ltr,
1626+ child: MediaQuery (
1627+ data: const MediaQueryData (),
1628+ child: RawScrollbar (
1629+ thickness: 20 ,
1630+ shape: const RoundedRectangleBorder (borderRadius: BorderRadius .only (topLeft: Radius .circular (8 ))),
1631+ controller: scrollController,
1632+ isAlwaysShown: true ,
1633+ child: SingleChildScrollView (
1634+ controller: scrollController,
1635+ child: const SizedBox (height: 1000.0 , width: 1000.0 ),
1636+ ),
1637+ ),
1638+ )));
1639+ await tester.pumpAndSettle ();
1640+ expect (
1641+ find.byType (RawScrollbar ),
1642+ paints
1643+ ..rect (rect: const Rect .fromLTRB (780.0 , 0.0 , 800.0 , 600.0 ))
1644+ ..path (
1645+ includes: const < Offset > [
1646+ Offset (800.0 , 0.0 ),
1647+ ],
1648+ excludes: const < Offset > [
1649+ Offset (780.0 , 0.0 ),
1650+ ],
1651+ ),
1652+ );
1653+ });
1654+
15461655 testWidgets ('minOverscrollLength property of RawScrollbar is respected' , (WidgetTester tester) async {
15471656 final ScrollController scrollController = ScrollController ();
15481657 await tester.pumpWidget (
@@ -1575,6 +1684,32 @@ void main() {
15751684 ..rect (rect: const Rect .fromLTRB (794.0 , 0.0 , 800.0 , 8.0 )));
15761685 });
15771686
1687+ testWidgets ('not passing any shape or radius to RawScrollbar will draw the usual rectangular thumb' , (WidgetTester tester) async {
1688+ final ScrollController scrollController = ScrollController ();
1689+ await tester.pumpWidget (
1690+ Directionality (
1691+ textDirection: TextDirection .ltr,
1692+ child: MediaQuery (
1693+ data: const MediaQueryData (),
1694+ child: RawScrollbar (
1695+ controller: scrollController,
1696+ isAlwaysShown: true ,
1697+ child: SingleChildScrollView (
1698+ controller: scrollController,
1699+ child: const SizedBox (height: 1000.0 ),
1700+ ),
1701+ ),
1702+ )));
1703+ await tester.pumpAndSettle ();
1704+
1705+ expect (
1706+ find.byType (RawScrollbar ),
1707+ paints
1708+ ..rect (rect: const Rect .fromLTRB (794.0 , 0.0 , 800.0 , 600.0 ))
1709+ ..rect (rect: const Rect .fromLTRB (794.0 , 0.0 , 800.0 , 360.0 ))
1710+ );
1711+ });
1712+
15781713 testWidgets ('The bar can show or hide when the viewport size change' , (WidgetTester tester) async {
15791714 final ScrollController scrollController = ScrollController ();
15801715 Widget buildFrame (double height) {
0 commit comments