feat: Added cache for photos and videos screen

This commit is contained in:
Deven Joshi
2021-02-02 17:19:46 +05:30
parent a1045acfc9
commit 91e173bbfd
2 changed files with 20 additions and 2 deletions
@@ -33,6 +33,8 @@ class ChannelMediaDisplayScreen extends StatefulWidget {
}
class _ChannelMediaDisplayScreenState extends State<ChannelMediaDisplayScreen> {
Map<String, VideoPlayerController> _controllerCache = {};
@override
void initState() {
super.initState();
@@ -147,8 +149,15 @@ class _ChannelMediaDisplayScreenState extends State<ChannelMediaDisplayScreen> {
.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<ChannelMediaDisplayScreen> {
stream: messageSearchBloc.messagesStream,
);
}
@override
void dispose() {
super.dispose();
for (var c in _controllerCache.values) {
c.dispose();
}
}
}
class _AssetPackage {
@@ -1056,6 +1056,7 @@ class _MessageListViewState extends State<MessageListView> {
streamChannel.reloadChannel();
}
_messageNewListener?.cancel();
videoPackages.values.forEach((e) => e.dispose());
super.dispose();
}
}