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