Flutter 在Flatter中同步页面视图和滑块的页面更改

Flutter 在Flatter中同步页面视图和滑块的页面更改,flutter,flutter-pageview,flutter-slider,Flutter,Flutter Pageview,Flutter Slider,在我的应用程序中,我有一个页面视图和一个滑块。当我滚动页面视图时,我希望滑块更改其值,当我滑动滑块时,我希望页面视图的页面也会更改。为此,我将状态设置为滑块的值,在onChanged中,我将更改其值,并在onChangeEnd中将页面视图设置为所需位置的动画: Slider( value: _sliderValue, onChanged: (val) { setState(() { _sliderValue = val; }); },

在我的应用程序中,我有一个
页面视图
和一个
滑块
。当我滚动
页面视图
时,我希望
滑块
更改其值,当我滑动
滑块
时,我希望
页面视图
的页面也会更改。为此,我将状态设置为
滑块的
,在
onChanged
中,我将更改其值,并在
onChangeEnd
中将
页面视图
设置为所需位置的动画:

Slider(
   value: _sliderValue,
   onChanged: (val) {
      setState(() {
         _sliderValue = val;
      });
   },
   onChangeEnd: (val) {
      _controller.animateToPage(val.toInt(),
          duration: Duration(milliseconds: 300), curve: Curves.ease);
      },
   max: (pages.length - 1).toDouble())
PageView
中,我还必须更新
\u sliderValue
,这样当我滚动
PageView
时它就会工作:

PageView.builder(
  onPageChanged: (page) {
    setState(() {
       _sliderValue = page.toDouble();
    });
  },
)
问题是,我现在有两个地方需要更改
\u sliderValue
——一个在
onChanged
中,以便
滑块能够响应,另一个在
onPageChanged
中,以便滚动。当我反复按下滑块时,它会发出刺耳的声音

有没有办法解决这个问题?

请使用val.round()而不是val.toInt()


实际上,这种情况下的问题在于,每次页面更改都会触发
PageView
onPageChanged
回调。例如,如果我们在第1页,使用
滑块
移动到第5页,则
onPageChanged
将被调用4次(对于第2-3-4-5页),因此
滑块
的值状态将重复更改4次。这会导致
滑块的砰砰声在各个位置跳跃

我试图通过在
onPageChanged
中设置
计时器来修复它,以便在触发
setState
之前等待一定时间,因此它只在最后一次页面更改完成后才会触发

// Define a Timer object in your state
Timer _timer;

这可能看起来很粗糙,结果实际上并不完美(当您手动滚动页面时,
滑块必须等待300毫秒才能更新其值),但这仍然是一个改进。如果有人有更好的解决方案,我很高兴听到。

这并不能解决我的问题。真正的问题是有两个相互重叠的状态更改。堆栈中有两个小部件吗?没有。滑块在底部,页面视图在上面。我一直在想,我认为你应该创建一个新的定制小部件。如果你真的不喜欢你现在发布的方式。
// Define a Timer object in your state
Timer _timer;
PageView.builder(
  onPageChanged: (page) {
    // If there is a Timer running, cancel it
    if (_timer != null) {
      _timer.cancel();
    }
    // Setup a new Timer
    _timer = Timer(Duration(milliseconds: 300), () {
      setState(() {
        _sliderValue = page.toDouble();
      });
    });
  },
)