繁体   English   中英

如何动态更改页面上的ScrollPhysics

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM