@@ -239,8 +239,10 @@ class _SliderState extends State<Slider> with TickerProviderStateMixin {
239
239
240
240
void _handleChanged (double value) {
241
241
assert (widget.onChanged != null );
242
- final double transformedValue = _lerp (value);
243
- widget.onChanged (transformedValue);
242
+ final double lerpValue = _lerp (value);
243
+ if (lerpValue != widget.value) {
244
+ widget.onChanged (lerpValue);
245
+ }
244
246
}
245
247
246
248
// Returns a number between min and max, proportional to value, which must
@@ -255,7 +257,7 @@ class _SliderState extends State<Slider> with TickerProviderStateMixin {
255
257
double _unlerp (double value) {
256
258
assert (value <= widget.max);
257
259
assert (value >= widget.min);
258
- return widget.max > widget.min ? (widget. value - widget.min) / (widget.max - widget.min) : 0.0 ;
260
+ return widget.max > widget.min ? (value - widget.min) / (widget.max - widget.min) : 0.0 ;
259
261
}
260
262
261
263
@override
@@ -380,12 +382,13 @@ class _RenderSlider extends RenderBox {
380
382
..team = team
381
383
..onStart = _handleDragStart
382
384
..onUpdate = _handleDragUpdate
383
- ..onEnd = _handleDragEnd;
385
+ ..onEnd = _handleDragEnd
386
+ ..onCancel = _endInteraction;
384
387
_tap = new TapGestureRecognizer ()
385
388
..team = team
386
- ..onTapCancel = _endInteraction
387
389
..onTapDown = _handleTapDown
388
- ..onTapUp = _handleTapUp;
390
+ ..onTapUp = _handleTapUp
391
+ ..onTapCancel = _endInteraction;
389
392
_reaction = new CurvedAnimation (parent: state.reactionController, curve: Curves .fastOutSlowIn)
390
393
..addListener (markNeedsPaint);
391
394
state.enableController.value = isInteractive ? 1.0 : 0.0 ;
@@ -586,6 +589,7 @@ class _RenderSlider extends RenderBox {
586
589
break ;
587
590
}
588
591
onChanged (_discretize (_currentDragValue));
592
+ markNeedsPaint ();
589
593
}
590
594
}
591
595
0 commit comments