ScrollablePositionedList перестраивается после вставки нового элемента в нулевой индекс списка

#flutter #dart #flutter-layout

Вопрос:

Я пытаюсь написать комнату чата, поэтому я использую reversed ScrollablePositionedList для отображения чатов, когда чат получен, я вставляю его в нулевой индекс, и после этого все 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(); }  

Комментарии:

1. Что это за тип chats ?

2. изображение, звук и текст

3. Я имею в виду объект «чаты», это а List ?

4. да, его тип-список

5. Я предполагаю, что вы использовали пакет «scrollable_positioned_list», поскольку у Flutter нет виджета такого типа. Правильно ли я понимаю, что единственная причина для этого-отображать самые последние сообщения внизу? Кроме того, в чем именно проблема с перезагрузкой?

Ответ №1:

Если я правильно понял ваш вопрос, вы устраните эту проблему, добавив ключ в ListView .builder () PageStorageKey(T value) , который предотвратит восстановление списка.

 ScrollablePositionedList.builder(  key: const PageStorageKeylt;Stringgt;('add_key_name'),  reverse: true,  physics: ClampingScrollPhysics(),  itemCount: _chatController.chats.length,  itemScrollController: itemScrollController,  itemPositionsListener: itemPositionsListener,  itemBuilder: (BuildContext context, int index) {  return ShowChatWidget();  }, ),  

Комментарии:

1. я добавил ключ к scrollablePositionedList , но, к сожалению, он не работает, и проблема все еще существует

2. Эй, не могли бы вы поделиться полным кодом экрана чатов? И пробовали ли вы использовать какую-либо модель управления государством

3. из-за конфиденциальности компании я не могу отправить код, но структура проста всякий раз, когда я получаю чат, я обращаюсь к списку obs, и список будет обновляться на самом деле я использую obx для обработки управления состоянием на самом деле ScrollablePositionedList оберните белый obx виджет