问题描述
当您根据 ListView
和 ListView.builder
的默认行为插入/删除/重新排序(或进行任何其他操作)ListView.separated
项时,它始终会重建整个小部件。
我怎样才能避免这种情况?它会带来数据丢失等不良后果。
解决方法
您可以通过设置 ListView.builder
属性来使用 ListView.separated
,而不是使用 ListView.custom
或 findChildIndexCallback
ListView.custom(
key: Key('messageListView'),controller: _scrollController,reverse: true,childrenDelegate: SliverChildBuilderDelegate(
(context,i) {
return Container(key: ValueKey('message-${message.id}'));
},childCount: _messages.length,findChildIndexCallback: (key) {
final ValueKey<String> valueKey = key;
return _messages
.indexWhere((m) => 'message-${m.id}' == valueKey.value);
},),);