fluttercandies / flutter_scrollview_observer

A widget for observing data related to the child widgets being displayed in a ScrollView. Maintainer: @LinXunFeng
https://pub.dev/packages/scrollview_observer
MIT License
438 stars 47 forks source link

[Discussions] ChatObserverClampingScrollPhysics 通过偏移量更新列表位置在列表中出现很长的 item 时会跳动 #66

Closed Albert556 closed 11 months ago

Albert556 commented 11 months ago

Content

从我的实验看来还是 Flutter 预测列表长度出现了问题。预测长度时通过选中的某个 item 的高度 * count 来计算整个列表的长度。

https://github.com/fluttercandies/flutter_scrollview_observer/assets/38153509/10a3370e-0f75-4687-aa08-5d0300333f1e

LinXunFeng commented 11 months ago

请查看 3.1、基本使用 的最后一段

Albert556 commented 11 months ago

cacheExtent 这个值应该怎么设置会比较合理?因为会有用户翻历史消息,同时来了新消息的场景。如果用户翻的历史消息太多,最后也可能跳动。

LinXunFeng commented 11 months ago

设置合理的 cacheExtent 建议有两点:

  1. 所设置的 cacheExtent 要能让你所参照的消息 item 被渲染出来,比如最大消息的高度(注:这个参照的 item 是相对的,不是绝对的,所以不存在说用户翻太多页导致没有参照而跳动)
  2. 应合理控制你们的消息长度,太长阅读性也不好

关于 item 是相对的说明,建议你看一下这篇 3、指定模式 的详细解释

你上面视频中是因为新增的最新消息 item 的高度太大,导致此时滚动视图(屏幕+缓存区)只渲染这一条,即列表中正在屏幕中展示和缓存区中未展示的所有 item 仅此一条,这样就没了参照 item,自然该功能就失效了

Albert556 commented 11 months ago

很感谢你的回复,真的很及时。

目前来说只能增加 cacheExtent 到最大值,因为业务并不限制每一个 item 的高度,但是限制了每个聊天中的消息个数。