fix: desktop, remote toolbar autohide (#8347)
Signed-off-by: fufesou <linlong1266@gmail.com>
This commit is contained in:
parent
d33fa3f073
commit
60f47cb549
@ -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,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
Loading…
x
Reference in New Issue
Block a user