From 270b4ebcc410a1cd628e6109229aba3163c509c9 Mon Sep 17 00:00:00 2001 From: Kypsis Date: Sat, 11 Mar 2023 20:31:24 +0200 Subject: [PATCH] fix: Hotfix Tooltip and Popover RTL position error --- lib/src/widgets/popover/popover.dart | 29 +++++++++++++++------------- lib/src/widgets/tooltip/tooltip.dart | 25 +++++++++++++----------- 2 files changed, 30 insertions(+), 24 deletions(-) diff --git a/lib/src/widgets/popover/popover.dart b/lib/src/widgets/popover/popover.dart index e7623dda..231bb9f9 100644 --- a/lib/src/widgets/popover/popover.dart +++ b/lib/src/widgets/popover/popover.dart @@ -261,9 +261,9 @@ class MoonPopoverState extends State with RouteAware, SingleTickerP void _handleTap(TapDownDetails details) { final RenderBox? tooltipRenderBox = _popoverKey.currentContext?.findRenderObject() as RenderBox?; final RenderBox? overlayRenderBox = Overlay.of(context).context.findRenderObject() as RenderBox?; - final tooltipPosition = tooltipRenderBox?.localToGlobal(Offset.zero, ancestor: overlayRenderBox); + final popoverPosition = tooltipRenderBox?.localToGlobal(Offset.zero, ancestor: overlayRenderBox); - if (tooltipPosition != null && !tooltipRenderBox!.size.contains(details.localPosition - tooltipPosition)) { + if (popoverPosition != null && !tooltipRenderBox!.size.contains(details.localPosition - popoverPosition)) { _removePopover(); } } @@ -385,7 +385,9 @@ class MoonPopoverState extends State with RouteAware, SingleTickerP final popoverTargetGlobalRight = targetRenderBox.localToGlobal(targetRenderBox.size.centerRight(Offset.zero), ancestor: overlayRenderBox); - if (Directionality.of(context) == TextDirection.rtl) { + if (Directionality.of(context) == TextDirection.rtl || + popoverPosition == MoonPopoverPosition.horizontal || + popoverPosition == MoonPopoverPosition.vertical) { switch (popoverPosition) { case MoonPopoverPosition.left: popoverPosition = MoonPopoverPosition.right; @@ -405,18 +407,19 @@ class MoonPopoverState extends State with RouteAware, SingleTickerP case MoonPopoverPosition.bottomRight: popoverPosition = MoonPopoverPosition.bottomLeft; break; - - default: - } - } else if (popoverPosition == MoonPopoverPosition.horizontal || popoverPosition == MoonPopoverPosition.vertical) { - // Compute real popoverPosition based on target position - popoverPosition = (popoverPosition == MoonPopoverPosition.vertical) - ? (popoverTargetGlobalCenter.dy < overlayRenderBox.size.center(Offset.zero).dy + case MoonPopoverPosition.vertical: + popoverPosition = popoverTargetGlobalCenter.dy < overlayRenderBox.size.center(Offset.zero).dy ? MoonPopoverPosition.bottom - : MoonPopoverPosition.top) - : (popoverTargetGlobalCenter.dx < overlayRenderBox.size.center(Offset.zero).dx + : MoonPopoverPosition.top; + break; + case MoonPopoverPosition.horizontal: + popoverPosition = popoverTargetGlobalCenter.dx < overlayRenderBox.size.center(Offset.zero).dx ? MoonPopoverPosition.right - : MoonPopoverPosition.left); + : MoonPopoverPosition.left; + break; + default: + break; + } } final popoverPositionParameters = _resolvePopoverPositionParameters( diff --git a/lib/src/widgets/tooltip/tooltip.dart b/lib/src/widgets/tooltip/tooltip.dart index fe54ecbc..2497e3a1 100644 --- a/lib/src/widgets/tooltip/tooltip.dart +++ b/lib/src/widgets/tooltip/tooltip.dart @@ -426,7 +426,9 @@ class MoonTooltipState extends State with RouteAware, SingleTickerP final tooltipTargetGlobalRight = targetRenderBox.localToGlobal(targetRenderBox.size.centerRight(Offset.zero), ancestor: overlayRenderBox); - if (Directionality.of(context) == TextDirection.rtl) { + if (Directionality.of(context) == TextDirection.rtl || + tooltipPosition == MoonTooltipPosition.horizontal || + tooltipPosition == MoonTooltipPosition.vertical) { switch (tooltipPosition) { case MoonTooltipPosition.left: tooltipPosition = MoonTooltipPosition.right; @@ -446,18 +448,19 @@ class MoonTooltipState extends State with RouteAware, SingleTickerP case MoonTooltipPosition.bottomRight: tooltipPosition = MoonTooltipPosition.bottomLeft; break; - - default: - } - } else if (tooltipPosition == MoonTooltipPosition.horizontal || tooltipPosition == MoonTooltipPosition.vertical) { - // Compute real tooltipPosition based on target position - tooltipPosition = (tooltipPosition == MoonTooltipPosition.vertical) - ? (tooltipTargetGlobalCenter.dy < overlayRenderBox.size.center(Offset.zero).dy + case MoonTooltipPosition.vertical: + tooltipPosition = tooltipTargetGlobalCenter.dy < overlayRenderBox.size.center(Offset.zero).dy ? MoonTooltipPosition.bottom - : MoonTooltipPosition.top) - : (tooltipTargetGlobalCenter.dx < overlayRenderBox.size.center(Offset.zero).dx + : MoonTooltipPosition.top; + break; + case MoonTooltipPosition.horizontal: + tooltipPosition = tooltipTargetGlobalCenter.dx < overlayRenderBox.size.center(Offset.zero).dx ? MoonTooltipPosition.right - : MoonTooltipPosition.left); + : MoonTooltipPosition.left; + break; + default: + break; + } } final tooltipPositionParameters = _resolveTooltipPositionParameters(