[英]How to change ScrollPhysics dynamically on page changed
我想每次向前或向后更改页面时都应用NeverScrollableScrollPhysics(),然后在3秒后返回AlwaysScrollableScrollPhysics()。 我将如何实现这种行为?
我试图在onPageChanged侦听器中设置setState,但是它破坏了页面视图。
class _HomePageState extends State<HomePage> {
ScrollPhysics myScrollPhysics = AlwaysScrollableScrollPhysics();
@override
Widget build(BuildContext context) {
return PageView(
scrollDirection: Axis.vertical,
controller: myPageController,
physics: myScrollPhysics,
onPageChanged: (index){
setState((){
myScrollPhysics = NeverScrollableScrollPhysics();
})
},
children: [...]
)
}
这部充满灵魂的作品:
在此功能中,您需要等待3秒钟,然后才能更改状态和物理状态。
void _scrollOn() async {
myScrollPhysics = NeverScrollableScrollPhysics();
await Future.delayed(const Duration(seconds: 3));
setState((){
myScrollPhysics = AlwaysScrollableScrollPhysics();
})
}
onPageChanged: (index){
setState((){
_scrollOn();
})
},
创建像这样的小部件时,您可以只使用三元运算符:
class _HomePageState extends State<HomePage> {
bool isScrollable = false;
@override
Widget build(BuildContext context) {
return PageView(
scrollDirection: Axis.vertical,
controller: myPageController,
physics: isScrollable ? AlwaysScrollableScrollPhysics()
: NeverScrollableScrollPhysics(),
onPageChanged: (index){
setState((){
isScrollable = !isScrollable;
})
},
children: [...]
)
}
只要确保您在setState
更改isScrollable
布尔值即可。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.