flutter - 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)页时它可以正常工作。
什么似乎可以解决它?
- 将持续时间减少到 250 毫秒或更短
- 将曲线更改为 easeIn
- 将 animateToPage 更改为 jumpTopage
那么这是 Flutter 的已知限制还是我做错了什么?
解决方案
我认为任何最初产生负值的曲线都会发生这种情况(如 Curves.elasticInOut)。我无法确定确切的行(我怀疑它在 ScrollPositionWithSingleContext 的 applyUserOffset 中),但负值似乎被视为动画已经完成。它有时可能适用于产生“较少负”(或足够接近于零)的值的更小/更快的动画。
Curves.linear 或 Curves.ease* 不会产生负值,因此它们应该始终如一地工作。
推荐阅读
- php - PHP 无法退出 hexdec()
- javascript - 输出要在非 ReactJS 站点中使用的组件的 ReactJS 项目
- angular - wow.js 与 Angular 产生警告
- java - Tomcat 服务器 HTML 页面井字游戏中的 ArrayIndexOutOfBoundsException
- javascript - javascripty中基于大小写字母的字符串匹配
- cors - nodemcu esp8266中的CORS问题
- c# - 如何将此 Task.WhenAll() 实现转换为 Parallel.ForEach()?
- ios - Whatsapp ChatStorage.sqlite 文件已损坏
- python - 创建中断 (ISR) 以创建平滑的机械臂运动
- python - 如何在 Python 中获取 CFFI 函数的 `const` 修饰符?