当您ListView
根据默认行为插入/删除/重新排序(或进行任何其他操作)项目时ListView.builder
,ListView.separated
它总是会重建整个小部件。
我怎样才能避免这种情况?它会带来不希望的结果,例如数据丢失。
当您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);
},
),
);