|
17 | 17 | * along with this program. If not, see <http://www.gnu.org/licenses/>.
|
18 | 18 | */
|
19 | 19 |
|
| 20 | +import 'dart:async'; |
| 21 | + |
20 | 22 | import 'package:bluecherry_client/models/device.dart';
|
21 | 23 | import 'package:bluecherry_client/providers/desktop_view_provider.dart';
|
22 | 24 | import 'package:bluecherry_client/providers/settings_provider.dart';
|
@@ -102,28 +104,25 @@ class DesktopTileViewport extends StatefulWidget {
|
102 | 104 |
|
103 | 105 | class _DesktopTileViewportState extends State<DesktopTileViewport> {
|
104 | 106 | bool ptzEnabled = false;
|
105 |
| - late double? volume = widget.controller?.volume; |
106 |
| - |
107 |
| - void updateVolume() { |
108 |
| - if (widget.controller != null && mounted) { |
109 |
| - setState(() => volume = widget.controller!.volume); |
110 |
| - } |
111 |
| - } |
| 107 | + double get volume => widget.controller?.volume ?? 0.0; |
| 108 | + StreamSubscription<double>? volumeSubscription; |
112 | 109 |
|
113 | 110 | @override
|
114 | 111 | void initState() {
|
115 | 112 | super.initState();
|
116 | 113 | if (widget.controller != null) {
|
117 |
| - updateVolume(); |
| 114 | + volumeSubscription = widget.controller!.volumeStream.listen((event) { |
| 115 | + if (mounted) { |
| 116 | + setState(() {}); |
| 117 | + } |
| 118 | + }); |
118 | 119 | }
|
119 | 120 | }
|
120 | 121 |
|
121 | 122 | @override
|
122 |
| - void didUpdateWidget(covariant DesktopTileViewport oldWidget) { |
123 |
| - super.didUpdateWidget(oldWidget); |
124 |
| - if (oldWidget.controller == null && widget.controller != null) { |
125 |
| - updateVolume(); |
126 |
| - } |
| 123 | + void dispose() { |
| 124 | + volumeSubscription?.cancel(); |
| 125 | + super.dispose(); |
127 | 126 | }
|
128 | 127 |
|
129 | 128 | @override
|
@@ -244,13 +243,11 @@ class _DesktopTileViewportState extends State<DesktopTileViewport> {
|
244 | 243 | tooltip:
|
245 | 244 | isMuted ? loc.enableAudio : loc.disableAudio,
|
246 | 245 | onPressed: () async {
|
247 |
| - if (isMuted) { |
248 |
| - await widget.controller!.setVolume(1.0); |
249 |
| - } else { |
| 246 | + if (!isMuted) { |
250 | 247 | await widget.controller!.setVolume(0.0);
|
| 248 | + } else { |
| 249 | + await widget.controller!.setVolume(1.0); |
251 | 250 | }
|
252 |
| - |
253 |
| - updateVolume(); |
254 | 251 | },
|
255 | 252 | ),
|
256 | 253 | if (isDesktopPlatform &&
|
@@ -343,7 +340,6 @@ class _DesktopTileViewportState extends State<DesktopTileViewport> {
|
343 | 340 | device.preferredStreamingType !=
|
344 | 341 | widget.device.preferredStreamingType,
|
345 | 342 | );
|
346 |
| - updateVolume(); |
347 | 343 | }
|
348 | 344 | },
|
349 | 345 | ),
|
|
0 commit comments