Closed yangqiuyan closed 7 months ago
从代码上来看,猜测是因为没有找到保持位置的参照 item
(一般也是因为这个原因~)。
可以看摘自 【Wiki - 3.1、基本使用】 的最后一段说明
注:该功能依赖被插入消息前的最新消息视图做为参照去计算偏移量,所以如果一次性插入的消息数太多,导致该参照消息视图无法得到渲染,则该功能会失效,需要你自己去对
ScrollView
的cacheExtent
设置合理的值来尽量避免这个问题!
cacheExtent
建议的值为:单个item的最大高度 * 条数 + 250
如:一次最多播入 20
条消息,单条消息 item
的最大高度为 300
,则 cacheExtent
建议的值为 300 * 20 + 250
实测添加了 cacheExtent 后,也无法保持位置不变
请提供可直接运行且可复现的 demo
example中,_addMessage方法,将Line 351改成: chatModels.insert(chatModels.length - 1, ChatDataHelper.createChatModel()); 将内容插在顶部,这时列表无法保持不动,而原始代码,insert在0的时候,是可以的
example中,_addMessage方法,将Line 351改成: chatModels.insert(chatModels.length - 1, ChatDataHelper.createChatModel()); 将内容插在顶部,这时列表无法保持不动,而原始代码,insert在0的时候,是可以的
往后面加数据的话不需要保持位置,记得调用 observeSwitchShrinkWrap
即可。
_addMessage(int count) {
setState(() {
chatModels.insert(chatModels.length - 1, ChatDataHelper.createChatModel());
chatObserver.observeSwitchShrinkWrap();
});
}
因原问题太久未回复,该 issue
关闭,有需要可以再次打开
Platforms
dart, Android
Description
往列表位置 0,插入N 条数据,写了chatObserver.standby(changeCount: N);,列表还是滚动到最上面了,没有保持列表不动。
My code
Try do it
No response