我有一个包含 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)页时它可以正常工作。
什么似乎可以解决这个问题?
这是 Flutter 的已知限制还是我做错了什么?
我认为任何最初产生负值的曲线都会发生这种情况(例如 Curves.elasticInOut)。我无法查明确切的行(我怀疑它位于 ScrollPositionWithSingleContext 的 applyUserOffset 中),但负值似乎被视为动画已经完成。它有时可能会使用更小/更快的动画,产生“负值较小”(或足够接近于零)的值。
Curves.linear 或 Curves.ease* 不会产生负值,因此它们应该一致工作。
将 PageView 滚动行为设置为 Cupertino(允许负值)似乎可以解决问题
PageView(
controller: controller,
scrollBehavior: CupertinoScrollBehavior(),
children: [
您可以在页面视图中添加
physics: const BouncingScrollPhysics(),
。
正如朋友所说,这是因为负值。
我希望它能帮助你。