From 91e173bbfd21a1c71a6f47d0adc651b8cd283bb7 Mon Sep 17 00:00:00 2001 From: Deven Joshi Date: Tue, 2 Feb 2021 17:19:46 +0530 Subject: [PATCH] feat: Added cache for photos and videos screen --- .../lib/src/channel_media_display_screen.dart | 21 +++++++++++++++++-- .../lib/src/message_list_view.dart | 1 + 2 files changed, 20 insertions(+), 2 deletions(-) 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(); } }