From b977bfc319cf5ce9075b16e71288702356415dcd Mon Sep 17 00:00:00 2001 From: PartyDonut Date: Thu, 31 Jul 2025 16:30:14 +0200 Subject: [PATCH] fix: CustomTooltip fix --- .../components/side_navigation_bar.dart | 116 ++++++++++-------- lib/widgets/shared/custom_tooltip.dart | 17 +++ 2 files changed, 83 insertions(+), 50 deletions(-) diff --git a/lib/widgets/navigation_scaffold/components/side_navigation_bar.dart b/lib/widgets/navigation_scaffold/components/side_navigation_bar.dart index 3ba29ae..42460a8 100644 --- a/lib/widgets/navigation_scaffold/components/side_navigation_bar.dart +++ b/lib/widgets/navigation_scaffold/components/side_navigation_bar.dart @@ -125,7 +125,7 @@ class _SideNavigationBarState extends ConsumerState { padding: const EdgeInsets.all(12), child: Text( destination.label, - style: Theme.of(context).textTheme.titleMedium, + style: Theme.of(context).textTheme.titleSmall, ), ), ), @@ -164,7 +164,7 @@ class _SideNavigationBarState extends ConsumerState { padding: const EdgeInsets.all(12), child: Text( view.name, - style: Theme.of(context).textTheme.titleMedium, + style: Theme.of(context).textTheme.titleSmall, ), ), ), @@ -206,60 +206,75 @@ class _SideNavigationBarState extends ConsumerState { }, ).toList(), builder: (context, remaining) { - return PopupMenuButton( - iconColor: Theme.of(context).colorScheme.onSurface.withValues(alpha: 0.45), - padding: EdgeInsets.zero, - icon: NavigationButton( - label: context.localized.other, - selectedIcon: const Icon(IconsaxPlusLinear.arrow_square_down), - icon: const Icon(IconsaxPlusLinear.arrow_square_down), - expanded: shouldExpand, - customIcon: usePostersForLibrary - ? ClipRRect( - borderRadius: FladderTheme.smallShape.borderRadius, - child: const SizedBox.square( - dimension: 50, - child: Card( - child: Icon(IconsaxPlusLinear.arrow_square_down), - ), + return CustomTooltip( + tooltipContent: expandedSideBar + ? null + : Card( + child: Padding( + padding: const EdgeInsets.all(12), + child: Text( + context.localized.moreOptions, + style: Theme.of(context).textTheme.titleSmall, ), - ) - : null, - horizontal: true, - ), - itemBuilder: (context) => views - .sublist(views.length - remaining) - .map( - (e) => PopupMenuItem( - onTap: () => context.pushRoute(LibrarySearchRoute(viewModelId: e.id)), - child: Row( - spacing: 8, - children: [ - usePostersForLibrary - ? Padding( - padding: const EdgeInsets.symmetric(vertical: 4), - child: ClipRRect( - borderRadius: FladderTheme.smallShape.borderRadius, - child: SizedBox.square( - dimension: 45, - child: FladderImage( - image: e.imageData?.primary, - placeHolder: Card( - child: Icon( - e.collectionType.iconOutlined, + ), + ), + position: TooltipPosition.right, + child: PopupMenuButton( + iconColor: Theme.of(context).colorScheme.onSurface.withValues(alpha: 0.45), + padding: EdgeInsets.zero, + tooltip: "", + icon: NavigationButton( + label: context.localized.other, + selectedIcon: const Icon(IconsaxPlusLinear.arrow_square_down), + icon: const Icon(IconsaxPlusLinear.arrow_square_down), + expanded: shouldExpand, + customIcon: usePostersForLibrary + ? ClipRRect( + borderRadius: FladderTheme.smallShape.borderRadius, + child: const SizedBox.square( + dimension: 50, + child: Card( + child: Icon(IconsaxPlusLinear.arrow_square_down), + ), + ), + ) + : null, + horizontal: true, + ), + itemBuilder: (context) => views + .sublist(views.length - remaining) + .map( + (e) => PopupMenuItem( + onTap: () => context.pushRoute(LibrarySearchRoute(viewModelId: e.id)), + child: Row( + spacing: 8, + children: [ + usePostersForLibrary + ? Padding( + padding: const EdgeInsets.symmetric(vertical: 4), + child: ClipRRect( + borderRadius: FladderTheme.smallShape.borderRadius, + child: SizedBox.square( + dimension: 45, + child: FladderImage( + image: e.imageData?.primary, + placeHolder: Card( + child: Icon( + e.collectionType.iconOutlined, + ), ), ), ), ), - ), - ) - : Icon(e.collectionType.iconOutlined), - Text(e.name), - ], + ) + : Icon(e.collectionType.iconOutlined), + Text(e.name), + ], + ), ), - ), - ) - .toList(), + ) + .toList(), + ), ); }, ), @@ -287,6 +302,7 @@ class _SideNavigationBarState extends ConsumerState { ), ), ), + if (AdaptiveLayout.of(context).inputDevice == InputDevice.pointer) const SizedBox(height: 16), ], ), ), diff --git a/lib/widgets/shared/custom_tooltip.dart b/lib/widgets/shared/custom_tooltip.dart index f20e7e9..23c009a 100644 --- a/lib/widgets/shared/custom_tooltip.dart +++ b/lib/widgets/shared/custom_tooltip.dart @@ -29,15 +29,31 @@ class CustomTooltipState extends State { Timer? _timer; final GlobalKey _tooltipKey = GlobalKey(); + Timer? _timeOut; + + void _resetTimer() { + _timeOut?.cancel(); + _timeOut = Timer(const Duration(seconds: 2), () { + _hideTooltip(); + _timeOut = null; + }); + } + void _showTooltip() { _timer = Timer(widget.showDelay, () { _overlayEntry = _createOverlayEntry(); Overlay.of(context).insert(_overlayEntry!); }); + + _timeOut = Timer(const Duration(seconds: 2), () { + _hideTooltip(); + _timeOut = null; + }); } void _hideTooltip() { _timer?.cancel(); + _timeOut?.cancel(); _overlayEntry?.remove(); _overlayEntry = null; } @@ -106,6 +122,7 @@ class CustomTooltipState extends State { return MouseRegion( onEnter: (_) => _showTooltip(), onExit: (_) => _hideTooltip(), + onHover: (_) => _resetTimer(), child: Stack( children: [ widget.child,