PageView.animateToPage 不适用于 elasticInOut 动画

问题描述 投票:0回答:3

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

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

[easeIn 动画,持续时间 500 毫秒]

用于后退按钮的代码

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

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

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

什么似乎可以解决这个问题?

  • 将持续时间减少至 250 毫秒或更短
  • 将曲线更改为easeIn
  • 将animateToPage更改为jumpTopage

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

flutter flutter-animation
3个回答
2
投票

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

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


2
投票

将 PageView 滚动行为设置为 Cupertino(允许负值)似乎可以解决问题

PageView(
   controller: controller,
   scrollBehavior: CupertinoScrollBehavior(),
   children: [

0
投票

您可以在页面视图中添加

physics: const BouncingScrollPhysics(),
。 正如朋友所说,这是因为负值。 我希望它能帮助你。

© www.soinside.com 2019 - 2024. All rights reserved.