@@ -92,8 +92,14 @@ class _RenderPositionDelegate extends RenderBox
92
92
// Layout properties - keep only those not managed by RenderObjectManager
93
93
var _needToResize = false ;
94
94
var _needToFlip = false ;
95
+
96
+ // These are the max size tooltip can have
97
+ // these can change as per the tooltip widget configuration and content
95
98
var _maxWidth = 0.0 ;
96
99
var _maxHeight = 0.0 ;
100
+
101
+ // These are the total size that we can use for tooltip
102
+ // This will be fixed after initial layout and will not change after that
97
103
var _availableScreenWidth = 0.0 ;
98
104
var _availableScreenHeight = 0.0 ;
99
105
var _minimumActionBoxSize = Size .zero;
@@ -530,7 +536,6 @@ class _RenderPositionDelegate extends RenderBox
530
536
} else if (tooltipPosition.isHorizontal) {
531
537
// For left/right positions, ensure height fits
532
538
if (_maxHeight > _availableScreenHeight) {
533
- _maxHeight = _availableScreenHeight;
534
539
_needToResize = true ;
535
540
_yOffset = screenEdgePadding + showcaseOffset.dy;
536
541
} else if (! isTopEdge) {
@@ -574,8 +579,7 @@ class _RenderPositionDelegate extends RenderBox
574
579
_maxHeight -= screenEdgePadding - _xOffset;
575
580
_yOffset = screenEdgePadding + showcaseOffset.dy;
576
581
} else {
577
- // Bottom edge - resize and keep at bottom
578
- _maxHeight += _calculateExtraVerticalHeight ();
582
+ // Bottom edge - keep at bottom
579
583
_yOffset = screenSize.height -
580
584
showcaseOffset.dy -
581
585
screenEdgePadding -
@@ -670,7 +674,6 @@ class _RenderPositionDelegate extends RenderBox
670
674
671
675
/// Apply final boundary constraints to ensure tooltip stays on screen
672
676
void _applyBoundaryConstraints (double tooltipHeight) {
673
- // Ensure tooltip stays within horizontal screen bounds
674
677
final screenStart = Offset (
675
678
screenEdgePadding + showcaseOffset.dx,
676
679
screenEdgePadding + showcaseOffset.dy,
@@ -683,24 +686,22 @@ class _RenderPositionDelegate extends RenderBox
683
686
showcaseOffset.dx,
684
687
screenSize.height - tooltipHeight - screenEdgePadding + showcaseOffset.dy,
685
688
);
686
- assert (
687
- screenStart.dx <= screenEnd.dx,
688
- 'Tooltip width is more then available size' ,
689
- );
690
- _xOffset = _xOffset.clamp (
691
- screenStart.dx,
692
- screenEnd.dx,
693
- );
689
+
690
+ // Ensure tooltip stays within horizontal screen bounds
691
+ _xOffset = screenStart.dx > screenEnd.dx
692
+ ? screenStart.dx
693
+ : _xOffset.clamp (
694
+ screenStart.dx,
695
+ screenEnd.dx,
696
+ );
694
697
695
698
// Ensure tooltip stays within vertical screen bounds
696
- assert (
697
- screenStart.dy <= screenEnd.dy,
698
- 'Tooltip height is more then available size' ,
699
- );
700
- _yOffset = _yOffset.clamp (
701
- screenStart.dy,
702
- screenEnd.dy,
703
- );
699
+ _yOffset = screenStart.dy > screenEnd.dy
700
+ ? screenStart.dy
701
+ : _yOffset.clamp (
702
+ screenStart.dy,
703
+ screenEnd.dy,
704
+ );
704
705
705
706
// Apply target padding based on position
706
707
_applyTargetPadding ();
0 commit comments