Resloves #541 Prevent double service call when slider is moved
This commit is contained in:
		| @@ -1,6 +1,6 @@ | |||||||
| part of '../main.dart'; | part of '../main.dart'; | ||||||
|  |  | ||||||
| class UniversalSlider extends StatelessWidget { | class UniversalSlider extends StatefulWidget { | ||||||
|  |  | ||||||
|   final onChanged; |   final onChanged; | ||||||
|   final onChangeEnd; |   final onChangeEnd; | ||||||
| @@ -14,33 +14,69 @@ class UniversalSlider extends StatelessWidget { | |||||||
|  |  | ||||||
|   const UniversalSlider({Key key, this.onChanged, this.onChangeEnd, this.leading, this.closing, this.title, this.min, this.max, this.value, this.padding: const EdgeInsets.fromLTRB(Sizes.leftWidgetPadding, Sizes.rowPadding, Sizes.rightWidgetPadding, 0.0)}) : super(key: key); |   const UniversalSlider({Key key, this.onChanged, this.onChangeEnd, this.leading, this.closing, this.title, this.min, this.max, this.value, this.padding: const EdgeInsets.fromLTRB(Sizes.leftWidgetPadding, Sizes.rowPadding, Sizes.rightWidgetPadding, 0.0)}) : super(key: key); | ||||||
|  |  | ||||||
|  |   @override | ||||||
|  |   State<StatefulWidget> createState() { | ||||||
|  |     return UniversalSliderState(); | ||||||
|  |   } | ||||||
|  |  | ||||||
|  | } | ||||||
|  |  | ||||||
|  | class UniversalSliderState extends State<UniversalSlider> { | ||||||
|  |  | ||||||
|  |   double _value; | ||||||
|  |   bool _changeStarted = false; | ||||||
|  |  | ||||||
|  |   @override | ||||||
|  |   void initState() { | ||||||
|  |     _value = widget.value; | ||||||
|  |     super.initState(); | ||||||
|  |   } | ||||||
|  |  | ||||||
|   @override |   @override | ||||||
|   Widget build(BuildContext context) { |   Widget build(BuildContext context) { | ||||||
|     List <Widget> row = []; |     List <Widget> row = []; | ||||||
|     if (leading != null) { |     if (widget.leading != null) { | ||||||
|       row.add(leading); |       row.add(widget.leading); | ||||||
|     } |     } | ||||||
|     row.add( |     row.add( | ||||||
|       Flexible( |       Flexible( | ||||||
|         child: Slider( |         child: Slider( | ||||||
|             value: value, |           value: _value, | ||||||
|             min: min, |           min: widget.min, | ||||||
|             max: max, |           max: widget.max, | ||||||
|             onChanged: (value) => onChanged(value), |           onChangeStart: (_) { | ||||||
|             onChangeEnd: (value) => onChangeEnd(value), |             _changeStarted = true;  | ||||||
|  |           }, | ||||||
|  |           onChanged: (value) { | ||||||
|  |             setState(() { | ||||||
|  |               _value = value; | ||||||
|  |             }); | ||||||
|  |             widget.onChanged(value); | ||||||
|  |           }, | ||||||
|  |           onChangeEnd: (value) { | ||||||
|  |             _changeStarted = false; | ||||||
|  |             Timer(Duration(milliseconds: 500), () { | ||||||
|  |               if (!_changeStarted) { | ||||||
|  |                 setState(() { | ||||||
|  |                   _value = value; | ||||||
|  |                 }); | ||||||
|  |                 widget.onChangeEnd(value); | ||||||
|  |               } | ||||||
|  |             }); | ||||||
|  |           } | ||||||
|         ), |         ), | ||||||
|       ) |       ) | ||||||
|     ); |     ); | ||||||
|     if (closing != null) { |     if (widget.closing != null) { | ||||||
|       row.add(closing); |       row.add(widget.closing); | ||||||
|     } |     } | ||||||
|     return Padding( |     return Padding( | ||||||
|       padding: padding, |       padding: widget.padding, | ||||||
|       child: Column( |       child: Column( | ||||||
|         crossAxisAlignment: CrossAxisAlignment.start, |         crossAxisAlignment: CrossAxisAlignment.start, | ||||||
|         children: <Widget>[ |         children: <Widget>[ | ||||||
|           Container(height: Sizes.rowPadding,), |           Container(height: Sizes.rowPadding,), | ||||||
|           Text("$title"), |           Text('${widget.title}'), | ||||||
|           Container(height: Sizes.rowPadding,), |           Container(height: Sizes.rowPadding,), | ||||||
|           Row( |           Row( | ||||||
|             mainAxisSize: MainAxisSize.min, |             mainAxisSize: MainAxisSize.min, | ||||||
| @@ -51,5 +87,4 @@ class UniversalSlider extends StatelessWidget { | |||||||
|       ), |       ), | ||||||
|     ); |     ); | ||||||
|   } |   } | ||||||
|  |  | ||||||
| } | } | ||||||
		Reference in New Issue
	
	Block a user