我遇到问题,我试图获取滑块的最终值,但由于某种原因, onChangeEnd 被触发 2 次,当用户移动滑块时,它会在初始位置触发,并在用户完成时触发最新位置。我需要在更改结束时处理一个函数,但由于它被触发了两次,我只需要使用第二个函数,我需要一种方法来逃避第一个函数。我认为这可能与 setState 函数有关,但如果我删除它,滑块将不会移动。
代码如下:
Slider(
value: _place.value,
min: 0.0,
max: 10.0,
divisions: 10,
onChangeStart: (double value) {
print('Start value is ' + value.toString());
},
onChangeEnd: (double value) {
print('Finish value is ' + value.toString());
},
onChanged: (double value) {
if (vm.isRatingPlace) {
setState(() {
_place.value = value;
});
}
},
activeColor: HeatMapColors.getOnFireColor(_place.value),
inactiveColor: Colors.black45,
));
Run Code Online (Sandbox Code Playgroud)
通过我那里的打印,当我尝试将滑块从位置 0 移动时,我得到以下结果:
Start value is 0.0
Finish value is 0.0
Start value is 0.0
Finish value is 6.0- 我只需要 onChangeEnd 事件中的这个
小智 0
我遇到过同样的问题。我添加了一个 bool 变量来管理推送状态。onChangeEnd 需要一点延迟
bool isPushed=false;
Slider(
value: _place.value,
min: 0.0,
max: 10.0,
divisions: 10,
onChangeStart: (double value) {
isPushed=true; // now the button is pushing
print('Start value is ' + value.toString());
},
onChangeEnd: (double value) {
isPushed=false; now the button is not pushing but it is not true
Future.delayed(const Duration(milliseconds: 200), () {
if (!isPushed) { // check if button is pushed after some millis
print('Finish value is ' + value.toString());
}
});
},
onChanged: (double value) {
if (vm.isRatingPlace) {
setState(() {
_place.value = value;
});
}
},
activeColor: HeatMapColors.getOnFireColor(_place.value),
inactiveColor: Colors.black45,
));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
915 次 |
| 最近记录: |