@@ -1945,6 +1945,7 @@ void main() {
1945
1945
double value = 0.5 ;
1946
1946
final ThemeData theme = ThemeData (useMaterial3: true );
1947
1947
final Key sliderKey = UniqueKey ();
1948
+ final FocusNode focusNode = FocusNode ();
1948
1949
1949
1950
Widget buildApp ({bool enabled = true }) {
1950
1951
return MaterialApp (
@@ -1953,8 +1954,9 @@ void main() {
1953
1954
child: Center (
1954
1955
child: StatefulBuilder (builder: (BuildContext context, StateSetter setState) {
1955
1956
return Slider (
1956
- value: value,
1957
1957
key: sliderKey,
1958
+ value: value,
1959
+ focusNode: focusNode,
1958
1960
onChanged: enabled
1959
1961
? (double newValue) {
1960
1962
setState (() {
@@ -1994,7 +1996,18 @@ void main() {
1994
1996
await drag.up ();
1995
1997
await tester.pumpAndSettle ();
1996
1998
1997
- // Slider still has overlay when stopped dragging.
1999
+ // Slider without focus doesn't have overlay when enabled and dragged.
2000
+ expect (focusNode.hasFocus, false );
2001
+ expect (
2002
+ Material .of (tester.element (find.byType (Slider ))),
2003
+ isNot (paints..circle (color: theme.colorScheme.primary.withOpacity (0.12 ))),
2004
+ );
2005
+
2006
+ // Slider has overlay when enabled, dragged and focused.
2007
+ focusNode.requestFocus ();
2008
+ await tester.pumpAndSettle ();
2009
+
2010
+ expect (focusNode.hasFocus, true );
1998
2011
expect (
1999
2012
Material .of (tester.element (find.byType (Slider ))),
2000
2013
paints..circle (color: theme.colorScheme.primary.withOpacity (0.12 )),
@@ -2005,15 +2018,17 @@ void main() {
2005
2018
tester.binding.focusManager.highlightStrategy = FocusHighlightStrategy .alwaysTraditional;
2006
2019
double value = 0.5 ;
2007
2020
final Key sliderKey = UniqueKey ();
2021
+ final FocusNode focusNode = FocusNode ();
2008
2022
2009
2023
Widget buildApp ({bool enabled = true }) {
2010
2024
return MaterialApp (
2011
2025
home: Material (
2012
2026
child: Center (
2013
2027
child: StatefulBuilder (builder: (BuildContext context, StateSetter setState) {
2014
2028
return Slider (
2015
- value: value,
2016
2029
key: sliderKey,
2030
+ value: value,
2031
+ focusNode: focusNode,
2017
2032
overlayColor: MaterialStateColor .resolveWith ((Set <MaterialState > states) {
2018
2033
if (states.contains (MaterialState .dragged)) {
2019
2034
return Colors .lime[500 ]! ;
@@ -2060,10 +2075,11 @@ void main() {
2060
2075
await drag.up ();
2061
2076
await tester.pumpAndSettle ();
2062
2077
2063
- // Slider still has overlay when stopped dragging.
2078
+ // Slider without focus doesn't have overlay when enabled and dragged.
2079
+ expect (focusNode.hasFocus, false );
2064
2080
expect (
2065
2081
Material .of (tester.element (find.byType (Slider ))),
2066
- paints..circle (color: Colors .lime[500 ]),
2082
+ isNot ( paints..circle (color: Colors .lime[500 ]) ),
2067
2083
);
2068
2084
});
2069
2085
@@ -3495,14 +3511,7 @@ void main() {
3495
3511
await gesture.up ();
3496
3512
await tester.pumpAndSettle ();
3497
3513
expect (focusNode.hasFocus, true );
3498
- expect (
3499
- Material .of (tester.element (find.byType (Slider ))),
3500
- paints..circle (color: overlayColor),
3501
- );
3502
-
3503
- focusNode.unfocus ();
3504
- await tester.pumpAndSettle ();
3505
- expect (focusNode.hasFocus, false );
3514
+ // Overlay is removed when adjusted with a tap.
3506
3515
expect (
3507
3516
Material .of (tester.element (find.byType (Slider ))),
3508
3517
isNot (paints..circle (color: overlayColor)),
@@ -3796,15 +3805,17 @@ void main() {
3796
3805
double value = 0.5 ;
3797
3806
final ThemeData theme = ThemeData ();
3798
3807
final Key sliderKey = UniqueKey ();
3808
+ final FocusNode focusNode = FocusNode ();
3799
3809
3800
3810
Widget buildApp ({bool enabled = true }) {
3801
3811
return MaterialApp (
3802
3812
home: Material (
3803
3813
child: Center (
3804
3814
child: StatefulBuilder (builder: (BuildContext context, StateSetter setState) {
3805
3815
return Slider (
3806
- value: value,
3807
3816
key: sliderKey,
3817
+ value: value,
3818
+ focusNode: focusNode,
3808
3819
onChanged: enabled
3809
3820
? (double newValue) {
3810
3821
setState (() {
@@ -3844,10 +3855,11 @@ void main() {
3844
3855
await drag.up ();
3845
3856
await tester.pumpAndSettle ();
3846
3857
3847
- // Slider still has overlay when stopped dragging.
3858
+ // Slider without focus doesn't have overlay when enabled and dragged.
3859
+ expect (focusNode.hasFocus, false );
3848
3860
expect (
3849
3861
Material .of (tester.element (find.byType (Slider ))),
3850
- paints..circle (color: theme.colorScheme.primary.withOpacity (0.12 )),
3862
+ isNot ( paints..circle (color: theme.colorScheme.primary.withOpacity (0.12 ) )),
3851
3863
);
3852
3864
});
3853
3865
});
0 commit comments