1

ListViewのデフォルトの動作に従ってアイテムを挿入/削除/並べ替え(または他の操作を行う)するとListView.builderListView.separated常にウィジェット全体が再構築されます。

どうすればこれを回避できますか? データの損失など、望ましくない結果をもたらします。

4

1 に答える 1

6

使用する代わりに、ListView.builderまたはプロパティを設定することでListView.separated使用できますListView.customfindChildIndexCallback

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);
          },
        ),
      );
于 2020-12-25T13:20:44.170 に答える