首页 > 解决方案 > PageView.animateToPage 不适用于 elasticInOut 动画

问题描述

我有一个 3 页的 PageView(初始页:0)。我打算做的是创建一个带有后退按钮的 3 部分页面,如果不在初始页面中,它只会显示。
用于从初始页面导航到其他页面的代码。(工作没有问题)

pageController.animateToPage(1,
    duration: Duration(milliseconds: 500),
    curve: Curves.easeIn);
}),

[easeIn 动画,500ms 持续时间]

用于后退按钮的代码

pageController.animateToPage(pageController.initialPage,
   duration: Duration(milliseconds: 500),
   curve: Curves.elasticInOut 
);

[elasticInOut 动画,500ms 持续时间]

当试图从第(2)页返回到第(0)页时,这将不起作用,但是在从第(1)页返回到第(0)页时它可以正常工作。

什么似乎可以解决它?

那么这是 Flutter 的已知限制还是我做错了什么?

标签: flutterflutter-animation

解决方案


我认为任何最初产生负值的曲线都会发生这种情况(如 Curves.elasticInOut)。我无法确定确切的行(我怀疑它在 ScrollPositionWithSingleContext 的 applyUserOffset 中),但负值似乎被视为动画已经完成。它有时可能适用于产生“较少负”(或足够接近于零)的值的更小/更快的动画。

Curves.linear 或 Curves.ease* 不会产生负值,因此它们应该始终如一地工作。


推荐阅读