diff --git a/lib/screens/layouts/desktop/viewport.dart b/lib/screens/layouts/desktop/viewport.dart index f3e57110..2283a564 100644 --- a/lib/screens/layouts/desktop/viewport.dart +++ b/lib/screens/layouts/desktop/viewport.dart @@ -17,6 +17,8 @@ * along with this program. If not, see . */ +import 'dart:async'; + import 'package:bluecherry_client/models/device.dart'; import 'package:bluecherry_client/providers/desktop_view_provider.dart'; import 'package:bluecherry_client/providers/settings_provider.dart'; @@ -102,28 +104,25 @@ class DesktopTileViewport extends StatefulWidget { class _DesktopTileViewportState extends State { bool ptzEnabled = false; - late double? volume = widget.controller?.volume; - - void updateVolume() { - if (widget.controller != null && mounted) { - setState(() => volume = widget.controller!.volume); - } - } + double get volume => widget.controller?.volume ?? 0.0; + StreamSubscription? volumeSubscription; @override void initState() { super.initState(); if (widget.controller != null) { - updateVolume(); + volumeSubscription = widget.controller!.volumeStream.listen((event) { + if (mounted) { + setState(() {}); + } + }); } } @override - void didUpdateWidget(covariant DesktopTileViewport oldWidget) { - super.didUpdateWidget(oldWidget); - if (oldWidget.controller == null && widget.controller != null) { - updateVolume(); - } + void dispose() { + volumeSubscription?.cancel(); + super.dispose(); } @override @@ -244,13 +243,11 @@ class _DesktopTileViewportState extends State { tooltip: isMuted ? loc.enableAudio : loc.disableAudio, onPressed: () async { - if (isMuted) { - await widget.controller!.setVolume(1.0); - } else { + if (!isMuted) { await widget.controller!.setVolume(0.0); + } else { + await widget.controller!.setVolume(1.0); } - - updateVolume(); }, ), if (isDesktopPlatform && @@ -343,7 +340,6 @@ class _DesktopTileViewportState extends State { device.preferredStreamingType != widget.device.preferredStreamingType, ); - updateVolume(); } }, ),