PageView.animateToPage不适用于elasticInOut动画

时间:2020-11-07 13:25:27

标签: flutter flutter-animation

我有一个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)页时,效果很好。

什么似乎可以解决?

  • 将持续时间缩短至250ms或更短
  • 改变曲线以缓解疲劳
  • 将animateToPage更改为jumpTopage

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

1 个答案:

答案 0 :(得分:0)

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

Curves.linear或Curves.ease *不会产生负值,因此它们应该保持一致。