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);
},
),
);