首页 > 解决方案 > 如何在页面更改时动态更改 ScrollPhysics

问题描述

我想在每次页面向前/向后更改时应用 NeverScrollableScrollPhysics(),然后在 3 秒后返回 AlwaysScrollableScrollPhysics()。我将如何实现这种行为?

我曾尝试在 onPageChanged 侦听器中设置状态,但它会破坏页面视图。

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: [...]
     )  
   }

标签: flutterflutter-layout

解决方案


这很有效:
在此功能中,您在更改状态和物理之前等待 3 秒。

void _scrollOn() async {
   myScrollPhysics = NeverScrollableScrollPhysics();
   await Future.delayed(const Duration(seconds: 3));
   setState((){
      myScrollPhysics = AlwaysScrollableScrollPhysics();
   })
}
onPageChanged: (index){
   setState((){
      _scrollOn();
   })
},

推荐阅读