首页 > 解决方案 > 将新项目插入到列表的零索引后重建 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();
}

标签: flutterdartflutter-layout

解决方案


如果我正确理解了您的问题,您可以通过向 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();
  },
),

推荐阅读