Flutter ListView处理并重新创建状态&;所有儿童的渲染对象

Flutter ListView处理并重新创建状态&;所有儿童的渲染对象,flutter,Flutter,我在ListView中处理视频,由于对象被不必要地处理,它会多次下载相同的视频。正因为如此,这场演出受到了重创。下面是列表视图的代码。我也尝试过Listview.builder和Listview,但都表现出相同的行为 ListView.custom( childrenDelegate: SliverChildBuilderDelegate( (BuildContext context, int index) { return VideoPl

我在ListView中处理视频,由于对象被不必要地处理,它会多次下载相同的视频。正因为如此,这场演出受到了重创。下面是列表视图的代码。我也尝试过Listview.builder和Listview,但都表现出相同的行为

ListView.custom(
      childrenDelegate: SliverChildBuilderDelegate(
          (BuildContext context, int index) {
            return VideoPlayer(
              id: snapshot.data[index]['url'],
            );
          },
          childCount: snapshot.data.length,
          findChildIndexCallback: (Key key) {
            final ValueKey valueKey = key;
            final String data = valueKey.value;
            return snapshot.data
                .indexWhere((element) => element['url'] == data);
          }),
      controller: controller,
    );

您不应该在ListView子级中存储重要状态,更不用说资源密集型媒体了。下载并缓存Listview子树之外的视频,以便孩子们可以根据需要轻松访问它们。阅读。感谢@Riwen的建议,我使用SliverChildListDelegate和AutomaticEpaLiveClientMixin处理每个列表项,它解决了问题。如果您的孩子数量有限,那么是的,这确实是一个解决方案。但是,如果列表变大,您可能会遇到性能问题。您不应该在ListView子级中存储重要状态,更不用说资源密集型媒体了。下载并缓存Listview子树之外的视频,以便孩子们可以根据需要轻松访问它们。阅读。感谢@Riwen的建议,我使用SliverChildListDelegate和AutomaticEpaLiveClientMixin处理每个列表项,它解决了问题。如果您的孩子数量有限,那么是的,这确实是一个解决方案。但是,如果列表变大,则可能会遇到性能问题。