feat: Added cache for photos and videos screen
This commit is contained in:
@@ -33,6 +33,8 @@ class ChannelMediaDisplayScreen extends StatefulWidget {
|
|||||||
}
|
}
|
||||||
|
|
||||||
class _ChannelMediaDisplayScreenState extends State<ChannelMediaDisplayScreen> {
|
class _ChannelMediaDisplayScreenState extends State<ChannelMediaDisplayScreen> {
|
||||||
|
Map<String, VideoPlayerController> _controllerCache = {};
|
||||||
|
|
||||||
@override
|
@override
|
||||||
void initState() {
|
void initState() {
|
||||||
super.initState();
|
super.initState();
|
||||||
@@ -147,8 +149,15 @@ class _ChannelMediaDisplayScreenState extends State<ChannelMediaDisplayScreen> {
|
|||||||
.forEach((e) {
|
.forEach((e) {
|
||||||
VideoPlayerController controller;
|
VideoPlayerController controller;
|
||||||
if (e.type == 'video') {
|
if (e.type == 'video') {
|
||||||
controller = VideoPlayerController.network(e.assetUrl);
|
var cachedController = _controllerCache[e.assetUrl];
|
||||||
controller.initialize();
|
|
||||||
|
if (cachedController == null) {
|
||||||
|
controller = VideoPlayerController.network(e.assetUrl);
|
||||||
|
controller.initialize();
|
||||||
|
_controllerCache[e.assetUrl] = controller;
|
||||||
|
} else {
|
||||||
|
controller = cachedController;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
media.add(_AssetPackage(e, item.message, controller));
|
media.add(_AssetPackage(e, item.message, controller));
|
||||||
});
|
});
|
||||||
@@ -221,6 +230,14 @@ class _ChannelMediaDisplayScreenState extends State<ChannelMediaDisplayScreen> {
|
|||||||
stream: messageSearchBloc.messagesStream,
|
stream: messageSearchBloc.messagesStream,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@override
|
||||||
|
void dispose() {
|
||||||
|
super.dispose();
|
||||||
|
for (var c in _controllerCache.values) {
|
||||||
|
c.dispose();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class _AssetPackage {
|
class _AssetPackage {
|
||||||
|
|||||||
@@ -1056,6 +1056,7 @@ class _MessageListViewState extends State<MessageListView> {
|
|||||||
streamChannel.reloadChannel();
|
streamChannel.reloadChannel();
|
||||||
}
|
}
|
||||||
_messageNewListener?.cancel();
|
_messageNewListener?.cancel();
|
||||||
|
videoPackages.values.forEach((e) => e.dispose());
|
||||||
super.dispose();
|
super.dispose();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user