fix: desktop, remote toolbar autohide (#8347)

Signed-off-by: fufesou <linlong1266@gmail.com>
This commit is contained in:
fufesou 2024-06-13 21:04:00 +08:00 committed by GitHub
parent d33fa3f073
commit 60f47cb549
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 19 additions and 8 deletions

View File

@ -85,6 +85,9 @@ class _RemotePageState extends State<RemotePage>
final FocusNode _rawKeyFocusNode = FocusNode(debugLabel: "rawkeyFocusNode"); 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; Function(bool)? _onEnterOrLeaveImage4Toolbar;
late FFI _ffi; late FFI _ffi;
@ -268,9 +271,18 @@ class _RemotePageState extends State<RemotePage>
id: widget.id, id: widget.id,
ffi: _ffi, ffi: _ffi,
state: widget.toolbarState, state: widget.toolbarState,
onEnterOrLeaveImageSetter: (func) => onEnterOrLeaveImageSetter: (id, func) {
_onEnterOrLeaveImage4Toolbar = func, _instanceIdOnEnterOrLeaveImage4Toolbar = id;
onEnterOrLeaveImageCleaner: () => _onEnterOrLeaveImage4Toolbar = null, _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, setRemoteState: setState,
); );

View File

@ -332,8 +332,8 @@ class RemoteToolbar extends StatefulWidget {
final String id; final String id;
final FFI ffi; final FFI ffi;
final ToolbarState state; final ToolbarState state;
final Function(Function(bool)) onEnterOrLeaveImageSetter; final Function(int, Function(bool)) onEnterOrLeaveImageSetter;
final VoidCallback onEnterOrLeaveImageCleaner; final Function(int) onEnterOrLeaveImageCleaner;
final Function(VoidCallback) setRemoteState; final Function(VoidCallback) setRemoteState;
RemoteToolbar({ RemoteToolbar({
@ -393,7 +393,7 @@ class _RemoteToolbarState extends State<RemoteToolbar> {
initialValue: 0, initialValue: 0,
); );
widget.onEnterOrLeaveImageSetter((enter) { widget.onEnterOrLeaveImageSetter(identityHashCode(this), (enter) {
if (enter) { if (enter) {
triggerAutoHide(); triggerAutoHide();
_isCursorOverImage = true; _isCursorOverImage = true;
@ -413,12 +413,11 @@ class _RemoteToolbarState extends State<RemoteToolbar> {
dispose() { dispose() {
super.dispose(); super.dispose();
widget.onEnterOrLeaveImageCleaner(); widget.onEnterOrLeaveImageCleaner(identityHashCode(this));
} }
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
// No need to use future builder here.
return Align( return Align(
alignment: Alignment.topCenter, alignment: Alignment.topCenter,
child: Obx(() => show.value child: Obx(() => show.value