flutter - 将新项目插入到列表的零索引后重建 ScrollablePositionedList
问题描述
我正在尝试编写一个聊天室,因此我 ScrollablePositionedList
在收到聊天时使用 reversed 来显示聊天,我将其插入零索引并在整个ScrollablePositionedList
重建之后。有什么方法可以防止ScrollablePositionedList
重新加载吗?
ScrollablePositionedList.builder(
reverse: true,
physics: ClampingScrollPhysics(),
itemCount: _chatController.chats.length,
itemScrollController: itemScrollController,
itemPositionsListener: itemPositionsListener,
itemBuilder: (BuildContext context, int index) {
return ShowChatWidget();
},
),
添加新聊天:
if (res.resultCode == 200) {
chats.insert(0,res.result!)
chats.refresh();
}
解决方案
如果我正确理解了您的问题,您可以通过向 ListView .builder() 添加一个键来解决此问题,PageStorageKey(T value)
这将阻止列表重建。
ScrollablePositionedList.builder(
key: const PageStorageKey<String>('add_key_name'),
reverse: true,
physics: ClampingScrollPhysics(),
itemCount: _chatController.chats.length,
itemScrollController: itemScrollController,
itemPositionsListener: itemPositionsListener,
itemBuilder: (BuildContext context, int index) {
return ShowChatWidget();
},
),
推荐阅读
- linux - 在 Ubuntu 16.04 中构建 Openmvg 时出现 CMake 错误
- html - 为什么@font-face 在此代码段中不起作用?
- javascript - 从带有括号内的父 ID 的 Array javascript 构建树
- html - 循环遍历 Angular (*ngfor) 中的一组对象并一次仅显示一个对象,直到单击按钮
- spring-integration - 有没有办法使用 DSL 分叉 Spring IntegrationFlow?
- node.js - 函数中更改的变量不会在 Node 中的函数之外更改
- git - 如何在不再次下载文件的情况下将下载的 zip 与上游同步?
- python - 使用 Python Selenium 打印出列表中的某些元素
- security - 我购买的 Python/Javascript 文件中是否存在恶意软件?
- java - 放心 - 如何验证具有相同名称的 JSON 响应字段