Flutter - 避免 ListView 重建

Nar*_*rek 5 listviewitem rendercontrol dart flutter

ListView当您根据默认行为插入/删除/重新排序(或执行任何其他操作)项目时ListView.builderListView.separated它总是会重建整个小部件。

我怎样才能避免这种情况?它会带来不良结果,例如数据丢失。

Nar*_*rek 10

您可以通过设置属性来代替使用ListView.builderListView.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);
          },
        ),
      );
Run Code Online (Sandbox Code Playgroud)