@@ -3886,6 +3886,7 @@ void main() {
3886
3886
// (slider's left padding (overlayRadius), windowHeight / 2)
3887
3887
const Offset startOfTheSliderTrack = Offset (24 , 300 );
3888
3888
const Offset centerOfTheSlideTrack = Offset (400 , 300 );
3889
+ final List <String > logs = < String > [];
3889
3890
3890
3891
Widget buildWidget () => MaterialApp (
3891
3892
home: Material (
@@ -3895,11 +3896,18 @@ void main() {
3895
3896
value: value,
3896
3897
key: sliderKey,
3897
3898
allowedInteraction: SliderInteraction .tapOnly,
3899
+ onChangeStart: (double newValue) {
3900
+ logs.add ('onChangeStart' );
3901
+ },
3898
3902
onChanged: (double newValue) {
3903
+ logs.add ('onChanged' );
3899
3904
setState (() {
3900
3905
value = newValue;
3901
3906
});
3902
3907
},
3908
+ onChangeEnd: (double newValue) {
3909
+ logs.add ('onChangeEnd' );
3910
+ },
3903
3911
);
3904
3912
}),
3905
3913
),
@@ -3909,26 +3917,35 @@ void main() {
3909
3917
// allow tap only
3910
3918
await tester.pumpWidget (buildWidget ());
3911
3919
3920
+ expect (logs, isEmpty);
3921
+
3912
3922
// test tap
3913
3923
final TestGesture gesture = await tester.startGesture (centerOfTheSlideTrack);
3914
3924
await tester.pump ();
3915
3925
// changes from 1.0 -> 0.5
3916
3926
expect (value, 0.5 );
3927
+ expect (logs, < String > ['onChangeStart' , 'onChanged' ]);
3917
3928
3918
3929
// test slide
3919
3930
await gesture.moveTo (startOfTheSliderTrack);
3920
3931
await tester.pump ();
3921
3932
// has no effect, remains 0.5
3922
3933
expect (value, 0.5 );
3934
+ expect (logs, < String > ['onChangeStart' , 'onChanged' ]);
3935
+
3936
+ await gesture.up ();
3937
+ await tester.pump ();
3938
+ expect (logs, < String > ['onChangeStart' , 'onChanged' , 'onChangeEnd' ]);
3923
3939
});
3924
3940
3925
- testWidgetsWithLeakTracking ('SliderInteraction.tapAndSlide' , (WidgetTester tester) async {
3941
+ testWidgetsWithLeakTracking ('SliderInteraction.tapAndSlide (default) ' , (WidgetTester tester) async {
3926
3942
double value = 1.0 ;
3927
3943
final Key sliderKey = UniqueKey ();
3928
3944
// (slider's left padding (overlayRadius), windowHeight / 2)
3929
3945
const Offset startOfTheSliderTrack = Offset (24 , 300 );
3930
3946
const Offset centerOfTheSlideTrack = Offset (400 , 300 );
3931
3947
const Offset endOfTheSliderTrack = Offset (800 - 24 , 300 );
3948
+ final List <String > logs = < String > [];
3932
3949
3933
3950
Widget buildWidget () => MaterialApp (
3934
3951
home: Material (
@@ -3937,12 +3954,18 @@ void main() {
3937
3954
return Slider (
3938
3955
value: value,
3939
3956
key: sliderKey,
3940
- // allowedInteraction: SliderInteraction.tapAndSlide, // default
3957
+ onChangeStart: (double newValue) {
3958
+ logs.add ('onChangeStart' );
3959
+ },
3941
3960
onChanged: (double newValue) {
3961
+ logs.add ('onChanged' );
3942
3962
setState (() {
3943
3963
value = newValue;
3944
3964
});
3945
3965
},
3966
+ onChangeEnd: (double newValue) {
3967
+ logs.add ('onChangeEnd' );
3968
+ },
3946
3969
);
3947
3970
}),
3948
3971
),
@@ -3951,11 +3974,14 @@ void main() {
3951
3974
3952
3975
await tester.pumpWidget (buildWidget ());
3953
3976
3977
+ expect (logs, isEmpty);
3978
+
3954
3979
// Test tap.
3955
3980
final TestGesture gesture = await tester.startGesture (centerOfTheSlideTrack);
3956
3981
await tester.pump ();
3957
3982
// changes from 1.0 -> 0.5
3958
3983
expect (value, 0.5 );
3984
+ expect (logs, < String > ['onChangeStart' , 'onChanged' ]);
3959
3985
3960
3986
// test slide
3961
3987
await gesture.moveTo (startOfTheSliderTrack);
@@ -3966,6 +3992,12 @@ void main() {
3966
3992
await tester.pump ();
3967
3993
// changes from 0.0 -> 1.0
3968
3994
expect (value, 1.0 );
3995
+ expect (logs, < String > ['onChangeStart' , 'onChanged' , 'onChanged' , 'onChanged' ]);
3996
+
3997
+ await gesture.up ();
3998
+ await tester.pump ();
3999
+
4000
+ expect (logs, < String > ['onChangeStart' , 'onChanged' , 'onChanged' , 'onChanged' , 'onChangeEnd' ]);
3969
4001
});
3970
4002
3971
4003
testWidgetsWithLeakTracking ('SliderInteraction.slideOnly' , (WidgetTester tester) async {
@@ -3975,6 +4007,7 @@ void main() {
3975
4007
const Offset startOfTheSliderTrack = Offset (24 , 300 );
3976
4008
const Offset centerOfTheSlideTrack = Offset (400 , 300 );
3977
4009
const Offset endOfTheSliderTrack = Offset (800 - 24 , 300 );
4010
+ final List <String > logs = < String > [];
3978
4011
3979
4012
Widget buildApp () {
3980
4013
return MaterialApp (
@@ -3985,11 +4018,18 @@ void main() {
3985
4018
value: value,
3986
4019
key: sliderKey,
3987
4020
allowedInteraction: SliderInteraction .slideOnly,
4021
+ onChangeStart: (double newValue) {
4022
+ logs.add ('onChangeStart' );
4023
+ },
3988
4024
onChanged: (double newValue) {
4025
+ logs.add ('onChanged' );
3989
4026
setState (() {
3990
4027
value = newValue;
3991
4028
});
3992
4029
},
4030
+ onChangeEnd: (double newValue) {
4031
+ logs.add ('onChangeEnd' );
4032
+ },
3993
4033
);
3994
4034
}),
3995
4035
),
@@ -3999,11 +4039,14 @@ void main() {
3999
4039
4000
4040
await tester.pumpWidget (buildApp ());
4001
4041
4042
+ expect (logs, isEmpty);
4043
+
4002
4044
// test tap
4003
4045
final TestGesture gesture = await tester.startGesture (centerOfTheSlideTrack);
4004
4046
await tester.pump ();
4005
4047
// has no effect as tap is disabled, remains 1.0
4006
4048
expect (value, 1.0 );
4049
+ expect (logs, < String > ['onChangeStart' ]);
4007
4050
4008
4051
// test slide
4009
4052
await gesture.moveTo (startOfTheSliderTrack);
@@ -4014,6 +4057,12 @@ void main() {
4014
4057
await tester.pump ();
4015
4058
// changes from 0.0 -> 1.0
4016
4059
expect (value, 1.0 );
4060
+ expect (logs, < String > ['onChangeStart' , 'onChanged' , 'onChanged' ]);
4061
+
4062
+ await gesture.up ();
4063
+ await tester.pump ();
4064
+
4065
+ expect (logs, < String > ['onChangeStart' , 'onChanged' , 'onChanged' , 'onChangeEnd' ]);
4017
4066
});
4018
4067
4019
4068
testWidgetsWithLeakTracking ('SliderInteraction.slideThumb' , (WidgetTester tester) async {
@@ -4023,6 +4072,7 @@ void main() {
4023
4072
const Offset startOfTheSliderTrack = Offset (24 , 300 );
4024
4073
const Offset centerOfTheSliderTrack = Offset (400 , 300 );
4025
4074
const Offset endOfTheSliderTrack = Offset (800 - 24 , 300 );
4075
+ final List <String > logs = < String > [];
4026
4076
4027
4077
Widget buildApp () {
4028
4078
return MaterialApp (
@@ -4033,11 +4083,18 @@ void main() {
4033
4083
value: value,
4034
4084
key: sliderKey,
4035
4085
allowedInteraction: SliderInteraction .slideThumb,
4086
+ onChangeStart: (double newValue) {
4087
+ logs.add ('onChangeStart' );
4088
+ },
4036
4089
onChanged: (double newValue) {
4090
+ logs.add ('onChanged' );
4037
4091
setState (() {
4038
4092
value = newValue;
4039
4093
});
4040
4094
},
4095
+ onChangeEnd: (double newValue) {
4096
+ logs.add ('onChangeEnd' );
4097
+ },
4041
4098
);
4042
4099
}),
4043
4100
),
@@ -4047,40 +4104,58 @@ void main() {
4047
4104
4048
4105
await tester.pumpWidget (buildApp ());
4049
4106
4107
+ expect (logs, isEmpty);
4108
+
4050
4109
// test tap
4051
4110
final TestGesture gesture = await tester.startGesture (centerOfTheSliderTrack);
4052
4111
await tester.pump ();
4053
4112
// has no effect, remains 1.0
4054
4113
expect (value, 1.0 );
4114
+ expect (logs, isEmpty);
4055
4115
4056
4116
// test slide
4057
4117
await gesture.moveTo (startOfTheSliderTrack);
4058
4118
await tester.pump ();
4059
4119
// has no effect, remains 1.0
4060
4120
expect (value, 1.0 );
4121
+ expect (logs, isEmpty);
4061
4122
4062
4123
// test slide thumb
4063
4124
await gesture.up ();
4064
4125
await gesture.down (endOfTheSliderTrack); // where the thumb is
4065
4126
await tester.pump ();
4066
4127
// has no effect, remains 1.0
4067
4128
expect (value, 1.0 );
4129
+ expect (logs, < String > ['onChangeStart' ]);
4130
+
4068
4131
await gesture.moveTo (centerOfTheSliderTrack);
4069
4132
await tester.pump ();
4070
4133
// changes from 1.0 -> 0.5
4071
4134
expect (value, 0.5 );
4135
+ expect (logs, < String > ['onChangeStart' , 'onChanged' ]);
4072
4136
4073
4137
// test tap inside overlay but not on thumb, then slide
4074
4138
await gesture.up ();
4075
4139
// default overlay radius is 12, so 10 is inside the overlay
4076
4140
await gesture.down (centerOfTheSliderTrack.translate (- 10 , 0 ));
4077
4141
await tester.pump ();
4078
- // has no effect, remains 1.0
4142
+ // changes from 1.0 -> 0.5
4079
4143
expect (value, 0.5 );
4144
+ expect (logs, < String > ['onChangeStart' , 'onChanged' , 'onChangeEnd' , 'onChangeStart' ]);
4145
+
4080
4146
await gesture.moveTo (endOfTheSliderTrack.translate (- 10 , 0 ));
4081
4147
await tester.pump ();
4082
4148
// changes from 0.5 -> 1.0
4083
4149
expect (value, 1.0 );
4150
+ expect (logs, < String > ['onChangeStart' , 'onChanged' , 'onChangeEnd' , 'onChangeStart' , 'onChanged' ]);
4151
+
4152
+ await gesture.up ();
4153
+ await tester.pump ();
4154
+
4155
+ expect (
4156
+ logs,
4157
+ < String > ['onChangeStart' , 'onChanged' , 'onChangeEnd' , 'onChangeStart' , 'onChanged' , 'onChangeEnd' ],
4158
+ );
4084
4159
});
4085
4160
});
4086
4161
}
0 commit comments