فهرست منبع

fix: selection menu show in wrong position

Lucas.Xu 2 سال پیش
والد
کامیت
e7adc3bcbf

+ 15 - 7
frontend/app_flowy/packages/appflowy_editor/lib/src/render/selection_menu/selection_menu_service.dart

@@ -61,19 +61,27 @@ class SelectionMenu implements SelectionMenuService {
     //  Just subtract the padding here as a result.
     const menuHeight = 200.0;
     const menuOffset = Offset(10, 10);
-    final baseOffset =
+    final editorOffset =
         editorState.renderBox?.localToGlobal(Offset.zero) ?? Offset.zero;
-    var offset = selectionRects.first.bottomRight + menuOffset;
-    if (offset.dy >=
-        baseOffset.dy + editorState.renderBox!.size.height - menuHeight) {
-      offset = selectionRects.first.topRight - menuOffset;
-      offset = offset.translate(0, -menuHeight);
+    final editorHeight = editorState.renderBox!.size.height;
+
+    // show below defualt
+    var showBelow = true;
+    final bottomRight = selectionRects.first.bottomRight;
+    final topRight = selectionRects.first.topRight;
+    var offset = bottomRight + menuOffset;
+    // overflow
+    if (offset.dy + menuHeight >= editorOffset.dy + editorHeight) {
+      // show above
+      offset = topRight - menuOffset;
+      showBelow = false;
     }
     _topLeft = offset;
 
     _selectionMenuEntry = OverlayEntry(builder: (context) {
       return Positioned(
-        top: offset.dy,
+        top: showBelow ? offset.dy : null,
+        bottom: showBelow ? null : editorHeight - offset.dy,
         left: offset.dx,
         child: SelectionMenuWidget(
           items: [