Resloves #541 Prevent double service call when slider is moved
This commit is contained in:
parent
2c3335ebf3
commit
df01599fe0
@ -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