@@ -1656,6 +1656,85 @@ void main() {
1656
1656
await gestureLongPress.up ();
1657
1657
await tester.pump ();
1658
1658
});
1659
+
1660
+ testWidgets ('Checkbox MaterialStateBorderSide applies in error states - M3' , (WidgetTester tester) async {
1661
+ final FocusNode focusNode = FocusNode (debugLabel: 'Checkbox' );
1662
+ final ThemeData themeData = ThemeData (useMaterial3: true );
1663
+ const Color borderColor = Color (0xffffeb3b );
1664
+ tester.binding.focusManager.highlightStrategy = FocusHighlightStrategy .alwaysTraditional;
1665
+ bool ? value = false ;
1666
+ Widget buildApp ({bool autoFocus = true }) {
1667
+ return MaterialApp (
1668
+ theme: themeData,
1669
+ home: Material (
1670
+ child: Center (
1671
+ child: StatefulBuilder (builder: (BuildContext context, StateSetter setState) {
1672
+ return Checkbox (
1673
+ isError: true ,
1674
+ side: MaterialStateBorderSide .resolveWith ((Set <MaterialState > states) {
1675
+ if (states.contains (MaterialState .error)) {
1676
+ return const BorderSide (color: borderColor, width: 4 );
1677
+ }
1678
+ return const BorderSide (color: Colors .red, width: 2 );
1679
+ }),
1680
+ value: value,
1681
+ onChanged: (bool ? newValue) {
1682
+ setState (() {
1683
+ value = newValue;
1684
+ });
1685
+ },
1686
+ autofocus: autoFocus,
1687
+ focusNode: focusNode,
1688
+ );
1689
+ }),
1690
+ ),
1691
+ ),
1692
+ );
1693
+ }
1694
+
1695
+ void expectBorder () {
1696
+ expect (
1697
+ tester.renderObject <RenderBox >(find.byType (Checkbox )),
1698
+ paints
1699
+ ..drrect (
1700
+ color: borderColor,
1701
+ outer: RRect .fromLTRBR (15 , 15 , 33 , 33 , const Radius .circular (1 )),
1702
+ inner: RRect .fromLTRBR (19 , 19 , 29 , 29 , Radius .zero),
1703
+ ),
1704
+ );
1705
+ }
1706
+
1707
+ await tester.pumpWidget (buildApp ());
1708
+ await tester.pumpAndSettle ();
1709
+ expectBorder ();
1710
+
1711
+ // Focused
1712
+ await tester.pumpWidget (buildApp ());
1713
+ await tester.pumpAndSettle ();
1714
+ expect (focusNode.hasPrimaryFocus, isTrue);
1715
+ expectBorder ();
1716
+
1717
+ // Default color
1718
+ await tester.pumpWidget (Container ());
1719
+ await tester.pumpWidget (buildApp (autoFocus: false ));
1720
+ await tester.pumpAndSettle ();
1721
+ expect (focusNode.hasPrimaryFocus, isFalse);
1722
+ expectBorder ();
1723
+
1724
+ // Start hovering
1725
+ final TestGesture gesture = await tester.createGesture (kind: PointerDeviceKind .mouse);
1726
+ await gesture.addPointer ();
1727
+ await gesture.moveTo (tester.getCenter (find.byType (Checkbox )));
1728
+ await tester.pumpAndSettle ();
1729
+ expectBorder ();
1730
+
1731
+ // Start pressing
1732
+ final TestGesture gestureLongPress = await tester.startGesture (tester.getCenter (find.byType (Checkbox )));
1733
+ await tester.pump ();
1734
+ expectBorder ();
1735
+ await gestureLongPress.up ();
1736
+ await tester.pump ();
1737
+ });
1659
1738
}
1660
1739
1661
1740
class _SelectedGrabMouseCursor extends MaterialStateMouseCursor {
0 commit comments