diff --git a/flutter/lib/desktop/pages/remote_page.dart b/flutter/lib/desktop/pages/remote_page.dart index 5e3d15130..6503fe108 100644 --- a/flutter/lib/desktop/pages/remote_page.dart +++ b/flutter/lib/desktop/pages/remote_page.dart @@ -85,6 +85,9 @@ class _RemotePageState extends State final FocusNode _rawKeyFocusNode = FocusNode(debugLabel: "rawkeyFocusNode"); + // We need `_instanceIdOnEnterOrLeaveImage4Toolbar` together with `_onEnterOrLeaveImage4Toolbar` + // to identify the toolbar instance and its callback function. + int? _instanceIdOnEnterOrLeaveImage4Toolbar; Function(bool)? _onEnterOrLeaveImage4Toolbar; late FFI _ffi; @@ -268,9 +271,18 @@ class _RemotePageState extends State id: widget.id, ffi: _ffi, state: widget.toolbarState, - onEnterOrLeaveImageSetter: (func) => - _onEnterOrLeaveImage4Toolbar = func, - onEnterOrLeaveImageCleaner: () => _onEnterOrLeaveImage4Toolbar = null, + onEnterOrLeaveImageSetter: (id, func) { + _instanceIdOnEnterOrLeaveImage4Toolbar = id; + _onEnterOrLeaveImage4Toolbar = func; + }, + onEnterOrLeaveImageCleaner: (id) { + // If _instanceIdOnEnterOrLeaveImage4Toolbar != id + // it means `_onEnterOrLeaveImage4Toolbar` is not set or it has been changed to another toolbar. + if (_instanceIdOnEnterOrLeaveImage4Toolbar == id) { + _instanceIdOnEnterOrLeaveImage4Toolbar = null; + _onEnterOrLeaveImage4Toolbar = null; + } + }, setRemoteState: setState, ); diff --git a/flutter/lib/desktop/widgets/remote_toolbar.dart b/flutter/lib/desktop/widgets/remote_toolbar.dart index 2e1ca67b0..869fe87a7 100644 --- a/flutter/lib/desktop/widgets/remote_toolbar.dart +++ b/flutter/lib/desktop/widgets/remote_toolbar.dart @@ -332,8 +332,8 @@ class RemoteToolbar extends StatefulWidget { final String id; final FFI ffi; final ToolbarState state; - final Function(Function(bool)) onEnterOrLeaveImageSetter; - final VoidCallback onEnterOrLeaveImageCleaner; + final Function(int, Function(bool)) onEnterOrLeaveImageSetter; + final Function(int) onEnterOrLeaveImageCleaner; final Function(VoidCallback) setRemoteState; RemoteToolbar({ @@ -393,7 +393,7 @@ class _RemoteToolbarState extends State { initialValue: 0, ); - widget.onEnterOrLeaveImageSetter((enter) { + widget.onEnterOrLeaveImageSetter(identityHashCode(this), (enter) { if (enter) { triggerAutoHide(); _isCursorOverImage = true; @@ -413,12 +413,11 @@ class _RemoteToolbarState extends State { dispose() { super.dispose(); - widget.onEnterOrLeaveImageCleaner(); + widget.onEnterOrLeaveImageCleaner(identityHashCode(this)); } @override Widget build(BuildContext context) { - // No need to use future builder here. return Align( alignment: Alignment.topCenter, child: Obx(() => show.value