【问题标题】:How to disable animation at the edges of PageView?如何禁用 PageView 边缘的动画?
【发布时间】:2019-11-23 18:00:30
【问题描述】:

我希望用户在 PageView 中的页面之间滚动,但是当他们尝试在第一页和最后一页之后滚动时,我不想向他们显示动画。我可以在彩色动画、黑色动画和无滚动之间切换,但我根本找不到任何禁用动画的可能性。

如果没有这种可能性,我该如何更改该动画的颜色或至少使其透明?

【问题讨论】:

  • 你是指显示在屏幕边缘的动画吗?
  • 是的,我希望如此。
  • 您可能必须构建自己的具有页面视图功能的小部件才能删除该动画。该动画的存在是为了更好的用户体验,以便用户知道他已经到达他正在滚动的项目的结尾和开头。为什么要删除它?
  • 从用户测试中我得到了令人不安的响应。用户认为应该有一些东西,这是他们所缺少的。而且它是黑色的,没有机会将其更改为白色,这增加了混乱。
  • 可以分享截图吗?黑色是一种奇怪的颜色。

标签: flutter


【解决方案1】:

根据您的屏幕截图,我可以说您正在使用BouncingScrollPhysics 作为您的PageView。 iOS 设备通常使用此行为。尽管如此,我还查看了您提供的整个源代码here

出了什么问题

您添加了PageView,但没有在顶层添加ScaffoldMaterial 小部件,这就是为什么PageView 的子元素后面的背景是黑色的。

https://dartpad.dev/c709e410d0a68248ac5b387b3bc6af93

来自文档:

Scaffold 实现了基本的材料设计视觉布局结构。

如果没有这个小部件,您会注意到您的应用程序可能会占据您设备的整个屏幕,包括通知栏,因为它 (PageView) 不知道状态栏在屏幕中的位置。

你能做什么

我注意到PageView 中添加的所有子项都有单独的ScaffoldAppBarit's not really necessary to nest scaffolds,您可能希望使用TabBarView 而不是PageView,并让父窗口小部件处理AppBar 通过 TabController 更改。

但是,如果您认为重构会花费太多精力,请随时查看以下选项,这些选项需要进行最少的更改以满足您的需求:

选项 1。您可以将小部件包装在 Scaffold 小部件中。

https://dartpad.dev/4620ff91444353f5e000d2063594bd96

选项 2. 鉴于嵌套 Scaffold 小部件不是一个好习惯,您可以只使用普通的 Material 小部件将您的 PageView 与用 Scaffold 小部件包裹的子组件一起包装.

https://dartpad.dev/43f8730e5592ce1f96193fc01f08a29c

这些解决方案会将PageView 的背景颜色从黑色更改为白色。

选项 3。如果你真的想摆脱动画,最简单的破解方法是改变你的滚动物理:

physics: ClampingScrollPhysics(),

但是,当您尝试在屏幕末端滑动时,它仍然会产生发光或涟漪效果。

为了进一步消除这种影响,我将与您分享这些 SO 答案:

进一步阅读

【讨论】:

  • 如果你能把 ClampingScrollPhysics 放在顶部会很有帮助,谢谢
猜你喜欢
  • 2018-04-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-24
  • 2011-12-10
  • 2012-10-24
  • 2010-11-24
  • 2019-08-04
相关资源
最近更新 更多