diff --git a/flutter/lib/desktop/pages/remote_page.dart b/flutter/lib/desktop/pages/remote_page.dart index b640eb235..b26329a7d 100644 --- a/flutter/lib/desktop/pages/remote_page.dart +++ b/flutter/lib/desktop/pages/remote_page.dart @@ -205,11 +205,13 @@ class _RemotePageState extends State } @override - void dispose() { + Future dispose() async { debugPrint("REMOTE PAGE dispose ${widget.id}"); if (useTextureRender) { platformFFI.registerTexture(sessionId, 0); - textureRenderer.closeTexture(_textureKey); + // sleep for a while to avoid the texture is used after it's unregistered. + await Future.delayed(Duration(milliseconds: 100)); + await textureRenderer.closeTexture(_textureKey); } // ensure we leave this session, this is a double check bind.sessionEnterOrLeave(sessionId: sessionId, enter: false); @@ -217,17 +219,17 @@ class _RemotePageState extends State _ffi.dialogManager.hideMobileActionsOverlay(); _ffi.recordingModel.onClose(); _rawKeyFocusNode.dispose(); - _ffi.close(); + await _ffi.close(); _timer?.cancel(); _ffi.dialogManager.dismissAll(); - SystemChrome.setEnabledSystemUIMode(SystemUiMode.manual, + await SystemChrome.setEnabledSystemUIMode(SystemUiMode.manual, overlays: SystemUiOverlay.values); if (!Platform.isLinux) { - Wakelock.disable(); + await Wakelock.disable(); } - Get.delete(tag: widget.id); - super.dispose(); + await Get.delete(tag: widget.id); removeSharedStates(widget.id); + super.dispose(); } Widget buildBody(BuildContext context) { diff --git a/flutter/lib/mobile/pages/remote_page.dart b/flutter/lib/mobile/pages/remote_page.dart index f1270d501..156d6190c 100644 --- a/flutter/lib/mobile/pages/remote_page.dart +++ b/flutter/lib/mobile/pages/remote_page.dart @@ -75,19 +75,19 @@ class _RemotePageState extends State { } @override - void dispose() { + Future dispose() async { gFFI.dialogManager.hideMobileActionsOverlay(); gFFI.inputModel.listenToMouse(false); - gFFI.invokeMethod("enable_soft_keyboard", true); + await gFFI.invokeMethod("enable_soft_keyboard", true); _mobileFocusNode.dispose(); _physicalFocusNode.dispose(); - gFFI.close(); + await gFFI.close(); _timer?.cancel(); gFFI.dialogManager.dismissAll(); - SystemChrome.setEnabledSystemUIMode(SystemUiMode.manual, + await SystemChrome.setEnabledSystemUIMode(SystemUiMode.manual, overlays: SystemUiOverlay.values); - Wakelock.disable(); - keyboardSubscription.cancel(); + await Wakelock.disable(); + await keyboardSubscription.cancel(); removeSharedStates(widget.id); super.dispose(); }