Resloves #541 Prevent double service call when slider is moved

This commit is contained in:
Yegor Vialov 2020-04-25 21:24:15 +00:00
parent 2c3335ebf3
commit df01599fe0

View File

@ -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 {
), ),
); );
} }
} }