From 6f97775990b47697b6c3b59309bcb630ca10c851 Mon Sep 17 00:00:00 2001 From: foxyz Date: Wed, 2 Sep 2026 22:53:30 +0300 Subject: [PATCH] chrome: guard against post-dispose stream events --- lib/src/viewer/leaf_chrome.dart | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/lib/src/viewer/leaf_chrome.dart b/lib/src/viewer/leaf_chrome.dart index cd697dc..8a9e067 100644 --- a/lib/src/viewer/leaf_chrome.dart +++ b/lib/src/viewer/leaf_chrome.dart @@ -28,26 +28,29 @@ class LeafViewerChrome { final ValueNotifier _visible = ValueNotifier(true); bool _hold = false; + bool _disposed = false; Timer? _timer; ValueListenable get visibleListenable => _visible; - bool get visible => _visible.value; + bool get visible => !_disposed && _visible.value; - void toggle() => _visible.value ? hide() : show(); + void toggle() => visible ? hide() : show(); void show() { + if (_disposed) return; _visible.value = true; _restartTimer(); } void hide() { + if (_disposed) return; _visible.value = false; _cancelTimer(); } /// While held, the auto-hide timer is suppressed. Releasing restarts it. set hold(bool value) { - if (_hold == value) return; + if (_disposed || _hold == value) return; _hold = value; value ? _cancelTimer() : _restartTimer(); } @@ -64,6 +67,8 @@ class LeafViewerChrome { } void dispose() { + if (_disposed) return; + _disposed = true; _cancelTimer(); _visible.dispose(); }