Flutter Slider 无法正确触发 onChangeEnd

Jos*_*aza 5 dart flutter

我遇到问题,我试图获取滑块的最终值,但由于某种原因, 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)