diff --git a/packages/stream_chat_flutter/lib/src/channel_media_display_screen.dart b/packages/stream_chat_flutter/lib/src/channel_media_display_screen.dart index 85b571bc..ba7291d6 100644 --- a/packages/stream_chat_flutter/lib/src/channel_media_display_screen.dart +++ b/packages/stream_chat_flutter/lib/src/channel_media_display_screen.dart @@ -33,6 +33,8 @@ class ChannelMediaDisplayScreen extends StatefulWidget { } class _ChannelMediaDisplayScreenState extends State { + Map _controllerCache = {}; + @override void initState() { super.initState(); @@ -147,8 +149,15 @@ class _ChannelMediaDisplayScreenState extends State { .forEach((e) { VideoPlayerController controller; if (e.type == 'video') { - controller = VideoPlayerController.network(e.assetUrl); - controller.initialize(); + var cachedController = _controllerCache[e.assetUrl]; + + if (cachedController == null) { + controller = VideoPlayerController.network(e.assetUrl); + controller.initialize(); + _controllerCache[e.assetUrl] = controller; + } else { + controller = cachedController; + } } media.add(_AssetPackage(e, item.message, controller)); }); @@ -221,6 +230,14 @@ class _ChannelMediaDisplayScreenState extends State { stream: messageSearchBloc.messagesStream, ); } + + @override + void dispose() { + super.dispose(); + for (var c in _controllerCache.values) { + c.dispose(); + } + } } class _AssetPackage { diff --git a/packages/stream_chat_flutter/lib/src/message_list_view.dart b/packages/stream_chat_flutter/lib/src/message_list_view.dart index 11a0a784..f3659838 100644 --- a/packages/stream_chat_flutter/lib/src/message_list_view.dart +++ b/packages/stream_chat_flutter/lib/src/message_list_view.dart @@ -1056,6 +1056,7 @@ class _MessageListViewState extends State { streamChannel.reloadChannel(); } _messageNewListener?.cancel(); + videoPackages.values.forEach((e) => e.dispose()); super.dispose(); } }