From 52733654c3da056e7baced290f54128cb1184683 Mon Sep 17 00:00:00 2001 From: 21pages Date: Thu, 8 Jun 2023 16:18:21 +0800 Subject: [PATCH] not accept dialog show when desktop page dispose Signed-off-by: 21pages --- flutter/lib/common.dart | 7 ++++++- flutter/lib/desktop/pages/file_manager_page.dart | 2 +- flutter/lib/desktop/pages/port_forward_page.dart | 2 +- flutter/lib/desktop/pages/remote_page.dart | 2 +- 4 files changed, 9 insertions(+), 4 deletions(-) diff --git a/flutter/lib/common.dart b/flutter/lib/common.dart index a78af2a94..f7035ae1b 100644 --- a/flutter/lib/common.dart +++ b/flutter/lib/common.dart @@ -600,12 +600,16 @@ class OverlayDialogManager { int _tagCount = 0; OverlayEntry? _mobileActionsOverlayEntry; + bool _stop = false; void setOverlayState(OverlayKeyState overlayKeyState) { _overlayKeyState = overlayKeyState; } - void dismissAll() { + void dismissAll({bool? stop}) { + if (stop != null) { + _stop = stop; + } _dialogs.forEach((key, value) { value.complete(null); BackButtonInterceptor.removeByName(key); @@ -625,6 +629,7 @@ class OverlayDialogManager { String? tag, bool useAnimation = true, bool forceGlobal = false}) { + if (_stop) return Future(() => null); final overlayState = forceGlobal ? globalKey.currentState?.overlay : _overlayKeyState.state; diff --git a/flutter/lib/desktop/pages/file_manager_page.dart b/flutter/lib/desktop/pages/file_manager_page.dart index eae3f1d69..401e8f0c1 100644 --- a/flutter/lib/desktop/pages/file_manager_page.dart +++ b/flutter/lib/desktop/pages/file_manager_page.dart @@ -97,7 +97,7 @@ class _FileManagerPageState extends State void dispose() { model.close().whenComplete(() { _ffi.close(); - _ffi.dialogManager.dismissAll(); + _ffi.dialogManager.dismissAll(stop: true); if (!Platform.isLinux) { Wakelock.disable(); } diff --git a/flutter/lib/desktop/pages/port_forward_page.dart b/flutter/lib/desktop/pages/port_forward_page.dart index 3a16ffbe1..cca6a2edb 100644 --- a/flutter/lib/desktop/pages/port_forward_page.dart +++ b/flutter/lib/desktop/pages/port_forward_page.dart @@ -70,7 +70,7 @@ class _PortForwardPageState extends State @override void dispose() { _ffi.close(); - _ffi.dialogManager.dismissAll(); + _ffi.dialogManager.dismissAll(stop: true); if (!Platform.isLinux) { Wakelock.disable(); } diff --git a/flutter/lib/desktop/pages/remote_page.dart b/flutter/lib/desktop/pages/remote_page.dart index 8259b53d0..159d630f3 100644 --- a/flutter/lib/desktop/pages/remote_page.dart +++ b/flutter/lib/desktop/pages/remote_page.dart @@ -220,7 +220,7 @@ class _RemotePageState extends State _rawKeyFocusNode.dispose(); _ffi.close(); _timer?.cancel(); - _ffi.dialogManager.dismissAll(); + _ffi.dialogManager.dismissAll(stop: true); SystemChrome.setEnabledSystemUIMode(SystemUiMode.manual, overlays: SystemUiOverlay.values); if (!Platform.isLinux) {