jenly1314 / UltraSwipeRefresh

:surfer: 一个可带来极致体验的Compose刷新组件;支持下拉刷新和上拉加载,可完美替代官方的SwipeRefresh;并且支持的功能更多,可扩展性更强。
MIT License
122 stars 6 forks source link

有很大几率,无法触发下拉 #7

Closed liu-xinhui closed 1 month ago

liu-xinhui commented 3 months ago

看视频,多拉几次,有时候就会导致无论怎么拉都无法触发刷新,必须松开手再次尝试才可以。

https://github.com/jenly1314/UltraSwipeRefresh/assets/7698511/988e7e6b-67b9-4a5b-accd-4d82c2a6c2cc

jenly1314 commented 3 months ago

看视频,多拉几次,有时候就会导致无论怎么拉都无法触发刷新,必须松开手再次尝试才可以。

638_1716118562.mp4

我测试是正常的;有更详细的重现步骤说明吗?

liu-xinhui commented 3 months ago

我这个小米手机,其他手机未测试。其中一个重现步骤是: 下拉后别释放,用手给他推回去,再次下拉几乎100%无法再次下拉,全程手指不能离开屏幕。

liu-xinhui commented 3 months ago

并且不能下拉之后,手指离开屏幕,立即再次下拉也是不行的,必须延迟一下,再尝试下拉才可以

liu-xinhui commented 3 months ago

你看我新视频,下拉后推回去,只要手指不松开,或者松开后立即下拉(视频中手指松开好几次)。都是无法再次触发下拉刷新。

https://github.com/jenly1314/UltraSwipeRefresh/assets/7698511/93aa754c-febf-409f-a066-e91c6cd9804b

jenly1314 commented 2 months ago

按照你的描述进行操作,依然无法复现;

确认一下你测试时的两个关键信息,便于分析原因。

  1. 是否是下载演示App进行测试的?
  2. 所使用的机型与Android系统版本?
liu-xinhui commented 2 months ago

1.使用的是演示app 2.机型是红米Turbo 3,系统是澎湃os1.1.11.0,android14 image image

liu-xinhui commented 2 months ago

感觉是缩放动画引起的,在这个手机上LazyColumn,拖曳时会有微小的上下缩放效果,只要这个缩放效果出现,就无法下拉。

jenly1314 commented 2 months ago

感觉是缩放动画引起的,在这个手机上LazyColumn,拖曳时会有微小的上下缩放效果,只要这个缩放效果出现,就无法下拉。

初步判定可能是手机兼容性问题,因为我怎么上下乱滑都无法出现你说的情况;所以还需要再确认下,你可以换其他的手机试试,我抽空也找个小米的手机试试。(记得MIUI是好像有个列表回弹的效果。)

liu-xinhui commented 2 months ago

模拟器中也可以复现,android 14

https://github.com/jenly1314/UltraSwipeRefresh/assets/7698511/977072e2-6dc2-4a68-9abf-e0e2e8511eb5

企业微信20240521-152401@2x
jenly1314 commented 2 months ago

感觉是缩放动画引起的,在这个手机上LazyColumn,拖曳时会有微小的上下缩放效果,只要这个缩放效果出现,就无法下拉。

换个手机已复现此问题;这个细节很重要,你猜的没错,就这个引起的。

jenly1314 commented 2 months ago

已修改此问题,你可以下载最新的演示App进行验证。

liu-xinhui commented 2 months ago

试过了,现在没问题了,什么时候发布到maven仓库呢

yqz0203 commented 2 months ago

我也遇到了,也是有弹性,有什么办法解决吗?

yqz0203 commented 2 months ago

CompositionLocalProvider( LocalOverscrollConfiguration provides null ) { }

禁用边界滚动完美解决

liu-xinhui commented 2 months ago

CompositionLocalProvider( LocalOverscrollConfiguration provides null ) { }

禁用边界滚动完美解决

确实,这个方法完美解决。修复后的版本还是有一定几率无法触发下拉刷新的,只是我试了其他app也都有同样的问题,比如今日头条。所以就没提。用了你这个办法,可以100%触发下拉,非常感谢。

jenly1314 commented 2 months ago

CompositionLocalProvider( LocalOverscrollConfiguration provides null ) { } 禁用边界滚动完美解决

确实,这个方法完美解决。修复后的版本还是有一定几率无法触发下拉刷新的,只是我试了其他app也都有同样的问题,比如今日头条。所以就没提。用了你这个办法,可以100%触发下拉,非常感谢。

  1. 按照之前的步骤能复现么?
  2. 如果需要用到LocalOverscrollConfiguration 解决的话,我抽空看下OverscrollConfiguration 的默认配置。
liu-xinhui commented 2 months ago

按照之前的步骤是不行的,复现方式只有快速下滑,然后快速上滑,多次尝试肯定能复现无法下拉。这个很多app都有这个问题,不单是UltraSwipeRefresh。套上CompositionLocalProvider( LocalOverscrollConfiguration provides null ) { }可以解决这个问题。

jenly1314 commented 2 months ago

按照之前的步骤是不行的,复现方式只有快速下滑,然后快速上滑,多次尝试肯定能复现无法下拉。这个很多app都有这个问题,不单是UltraSwipeRefresh。套上CompositionLocalProvider( LocalOverscrollConfiguration provides null ) { }可以解决这个问题。

我抽空看下OverscrollConfiguration相关源码,找下具体原因,加上 CompositionLocalProvider( LocalOverscrollConfiguration provides null ) { } 能解决是因为直接把传递到内部的 OverscrollConfiguration 相关的配置直接给干掉了。

jenly1314 commented 2 months ago

按照之前的步骤是不行的,复现方式只有快速下滑,然后快速上滑,多次尝试肯定能复现无法下拉。这个很多app都有这个问题,不单是UltraSwipeRefresh。套上CompositionLocalProvider( LocalOverscrollConfiguration provides null ) { }可以解决这个问题。

我抽空看下OverscrollConfiguration相关源码,找下具体原因,加上 CompositionLocalProvider( LocalOverscrollConfiguration provides null ) { } 能解决是因为直接把传递到内部的 OverscrollConfiguration 相关的配置直接给干掉了。

看了下源码的大概流程,目前得出如下结论:

  1. 通过:Modifier.overscroll(overscrollEffect) 来禁用这种边界过渡滚动效果理论上是可行的;
  2. 也找到了使用 CompositionLocalProvider(LocalOverscrollConfiguration provides null) { } 能解决边界滚动的关键点:AndroidOverscroll.android.kt#L67;(方式2更彻底)

至于最后怎么处理,还需等我先复现并验证此问题后,再看是否有必要内置方式2。

jenly1314 commented 2 months ago

按照之前的步骤是不行的,复现方式只有快速下滑,然后快速上滑,多次尝试肯定能复现无法下拉。这个很多app都有这个问题,不单是UltraSwipeRefresh。套上CompositionLocalProvider( LocalOverscrollConfiguration provides null ) { }可以解决这个问题。

我抽空看下OverscrollConfiguration相关源码,找下具体原因,加上 CompositionLocalProvider( LocalOverscrollConfiguration provides null ) { } 能解决是因为直接把传递到内部的 OverscrollConfiguration 相关的配置直接给干掉了。

看了下源码的大概流程,目前得出如下结论:

  1. 通过:Modifier.overscroll(overscrollEffect) 来禁用这种边界过渡滚动效果理论上是可行的;
  2. 也找到了使用 CompositionLocalProvider(LocalOverscrollConfiguration provides null) { } 能解决边界滚动的关键点:AndroidOverscroll.android.kt#L67;(方式2更彻底)

至于最后怎么处理,还需等我先复现并验证此问题后,再看是否有必要内置方式2。

  1. 昨天抽空测试了下,按照后面说的这样操作,无法复现;
  2. 麻烦帮测试下:如果使用默认的SwipeRefreshHeader 是否有同样的问题?(对应的示例:SwipeRefreshIndicatorSample
liu-xinhui commented 2 months ago

我这边是可以很容易复现,你手机是不是比较老,可能新手机比较容易复现。每一种下拉都可以很容易复现,包括SwipeRefreshIndicatorSample。我拍个视频你看看

liu-xinhui commented 2 months ago

可以100%复现

https://github.com/jenly1314/UltraSwipeRefresh/assets/7698511/7baf4620-1096-4fb7-ab82-4dbca6f526d7

liu-xinhui commented 2 months ago

https://github.com/jenly1314/UltraSwipeRefresh/assets/7698511/226cc485-8643-4201-8c75-42e523de85e3

重新录了一个有声音的

jenly1314 commented 2 months ago

我这边是可以很容易复现,你手机是不是比较老,可能新手机比较容易复现。每一种下拉都可以很容易复现,包括SwipeRefreshIndicatorSample。我拍个视频你看看

那换成使用google的SwipeRefresh是否存在同样的问题呢?

jenly1314 commented 2 months ago

我这边是可以很容易复现,你手机是不是比较老,可能新手机比较容易复现。每一种下拉都可以很容易复现,包括SwipeRefreshIndicatorSample。我拍个视频你看看

那换成使用google的SwipeRefresh是否存在同样的问题呢?

优化了一些细节,并补充了关于google的SwipeRefresh示例;可以下载 演示App 测下 UltraSwipeRefresh 和 google的SwipeRefresh示例是否都存在此问题?

liu-xinhui commented 2 months ago

我这边是可以很容易复现,你手机是不是比较老,可能新手机比较容易复现。每一种下拉都可以很容易复现,包括SwipeRefreshIndicatorSample。我拍个视频你看看

那换成使用google的SwipeRefresh是否存在同样的问题呢?

优化了一些细节,并补充了关于google的SwipeRefresh示例;可以下载 演示App 测下 UltraSwipeRefresh 和 google的SwipeRefresh示例是否都存在此问题?

google的SwipeRefresh已测试,有同样的问题。看视频。

https://github.com/jenly1314/UltraSwipeRefresh/assets/7698511/169c67b5-7088-4b07-be32-2ab4efe41ea7

jenly1314 commented 2 months ago

我这边是可以很容易复现,你手机是不是比较老,可能新手机比较容易复现。每一种下拉都可以很容易复现,包括SwipeRefreshIndicatorSample。我拍个视频你看看

那换成使用google的SwipeRefresh是否存在同样的问题呢?

优化了一些细节,并补充了关于google的SwipeRefresh示例;可以下载 演示App 测下 UltraSwipeRefresh 和 google的SwipeRefresh示例是否都存在此问题?

google的SwipeRefresh已测试,有同样的问题。看视频。

692_1718542399.mp4

好的,既然如此,那我抽空改下:向OverscrollConfiguration妥协了;

这里附上 SwipeRefresh的对应Issue#1059记录下,便于后续查看;虽是已关闭状态,但并未真正解决。

liu-xinhui commented 2 months ago

SwipeRefresh的对应Issuehttps://github.com/google/accompanist/issues/1059记录下 SwipeRefresh这个居然设置了30天无人讨论自动关闭,这不是不想改bug吗

jenly1314 commented 2 months ago

SwipeRefresh的对应Issuehttps://github.com/google/accompanist/issues/1059记录下 SwipeRefresh这个居然设置了30天无人讨论自动关闭,这不是不想改bug吗

存在即合理。

jenly1314 commented 2 months ago

已修改,如需验证,可下载 演示App;如需提前使用,可参见:待发布版本