From df01599fe08ac10d7f5ac419b26b61671be764b0 Mon Sep 17 00:00:00 2001 From: Yegor Vialov Date: Sat, 25 Apr 2020 21:24:15 +0000 Subject: [PATCH] Resloves #541 Prevent double service call when slider is moved --- lib/entities/universal_slider.widget.dart | 69 +++++++++++++++++------ 1 file changed, 52 insertions(+), 17 deletions(-) diff --git a/lib/entities/universal_slider.widget.dart b/lib/entities/universal_slider.widget.dart index a8d2c04..563e993 100644 --- a/lib/entities/universal_slider.widget.dart +++ b/lib/entities/universal_slider.widget.dart @@ -1,6 +1,6 @@ part of '../main.dart'; -class UniversalSlider extends StatelessWidget { +class UniversalSlider extends StatefulWidget { final onChanged; 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); + @override + State createState() { + return UniversalSliderState(); + } + +} + +class UniversalSliderState extends State { + + double _value; + bool _changeStarted = false; + + @override + void initState() { + _value = widget.value; + super.initState(); + } + @override Widget build(BuildContext context) { List row = []; - if (leading != null) { - row.add(leading); + if (widget.leading != null) { + row.add(widget.leading); } row.add( - Flexible( - child: Slider( - value: value, - min: min, - max: max, - onChanged: (value) => onChanged(value), - onChangeEnd: (value) => onChangeEnd(value), - ), - ) + Flexible( + child: Slider( + value: _value, + min: widget.min, + max: widget.max, + onChangeStart: (_) { + _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) { - row.add(closing); + if (widget.closing != null) { + row.add(widget.closing); } return Padding( - padding: padding, + padding: widget.padding, child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Container(height: Sizes.rowPadding,), - Text("$title"), + Text('${widget.title}'), Container(height: Sizes.rowPadding,), Row( mainAxisSize: MainAxisSize.min, @@ -51,5 +87,4 @@ class UniversalSlider extends StatelessWidget { ), ); } - } \ No newline at end of file