Browse Source

feat: hide overlay when tap on the editor

Lucas.Xu 2 years ago
parent
commit
e3e1d25494

+ 14 - 0
frontend/app_flowy/packages/flowy_editor/example/lib/plugin/document_node_widget.dart

@@ -46,6 +46,13 @@ class _EditorNodeWidget extends StatelessWidget {
               ..onEnd = _onPanEnd;
           },
         ),
+        TapGestureRecognizer:
+            GestureRecognizerFactoryWithHandlers<TapGestureRecognizer>(
+          () => TapGestureRecognizer(),
+          (recongizer) {
+            recongizer..onTap = _onTap;
+          },
+        )
       },
       child: SingleChildScrollView(
         child: Column(
@@ -66,8 +73,15 @@ class _EditorNodeWidget extends StatelessWidget {
     );
   }
 
+  void _onTap() {
+    editorState.panStartOffset = null;
+    editorState.panEndOffset = null;
+    editorState.updateSelection();
+  }
+
   void _onPanStart(DragStartDetails details) {
     editorState.panStartOffset = details.globalPosition;
+    editorState.updateSelection();
   }
 
   void _onPanUpdate(DragUpdateDetails details) {

+ 4 - 3
frontend/app_flowy/packages/flowy_editor/lib/editor_state.dart

@@ -56,6 +56,10 @@ class EditorState {
   List<OverlayEntry> selectionOverlays = [];
 
   void updateSelection() {
+    selectionOverlays
+      ..forEach((element) => element.remove())
+      ..clear();
+
     final selectedNodes = _selectedNodes;
     if (selectedNodes.isEmpty) {
       return;
@@ -63,9 +67,6 @@ class EditorState {
 
     assert(panStartOffset != null && panEndOffset != null);
 
-    selectionOverlays
-      ..forEach((element) => element.remove())
-      ..clear();
     for (final node in selectedNodes) {
       final key = node.key;
       if (key != null && key.currentState is Selectable) {