From 514ed78ae095d2befe6ab09efc9ccdf0c144f7f0 Mon Sep 17 00:00:00 2001 From: carloslabhouse <149477292+carloslabhouse@users.noreply.github.com> Date: Wed, 21 Jan 2026 17:42:07 +0100 Subject: [PATCH] feat: :art: Add parameter to change the autoscrolling boundary --- .../lib/src/default_editor/super_editor.dart | 44 +++++++++++-------- 1 file changed, 26 insertions(+), 18 deletions(-) diff --git a/super_editor/lib/src/default_editor/super_editor.dart b/super_editor/lib/src/default_editor/super_editor.dart index 011d3a6c3e..8388346870 100644 --- a/super_editor/lib/src/default_editor/super_editor.dart +++ b/super_editor/lib/src/default_editor/super_editor.dart @@ -13,48 +13,48 @@ import 'package:super_editor/src/core/document_selection.dart'; import 'package:super_editor/src/core/edit_context.dart'; import 'package:super_editor/src/core/editor.dart'; import 'package:super_editor/src/core/styles.dart'; +import 'package:super_editor/src/default_editor/attributions.dart'; +import 'package:super_editor/src/default_editor/blockquote.dart'; import 'package:super_editor/src/default_editor/common_editor_operations.dart'; import 'package:super_editor/src/default_editor/debug_visualization.dart'; +import 'package:super_editor/src/default_editor/document_caret_overlay.dart'; +import 'package:super_editor/src/default_editor/document_focus_and_selection_policies.dart'; +import 'package:super_editor/src/default_editor/document_gestures_mouse.dart'; import 'package:super_editor/src/default_editor/document_gestures_touch_android.dart'; import 'package:super_editor/src/default_editor/document_gestures_touch_ios.dart'; +import 'package:super_editor/src/default_editor/document_hardware_keyboard/document_input_keyboard.dart'; +import 'package:super_editor/src/default_editor/document_ime/document_input_ime.dart'; import 'package:super_editor/src/default_editor/document_scrollable.dart'; +import 'package:super_editor/src/default_editor/horizontal_rule.dart'; +import 'package:super_editor/src/default_editor/image.dart'; import 'package:super_editor/src/default_editor/layout_single_column/_styler_composing_region.dart'; +import 'package:super_editor/src/default_editor/layout_single_column/layout_single_column.dart'; import 'package:super_editor/src/default_editor/list_items.dart'; +import 'package:super_editor/src/default_editor/paragraph.dart'; import 'package:super_editor/src/default_editor/tap_handlers/tap_handlers.dart'; import 'package:super_editor/src/default_editor/tasks.dart'; +import 'package:super_editor/src/default_editor/text.dart'; import 'package:super_editor/src/default_editor/text/custom_underlines.dart'; +import 'package:super_editor/src/default_editor/unknown_component.dart'; import 'package:super_editor/src/infrastructure/content_layers.dart'; +import 'package:super_editor/src/infrastructure/document_gestures.dart'; +import 'package:super_editor/src/infrastructure/document_gestures_interaction_overrides.dart'; import 'package:super_editor/src/infrastructure/documents/document_scaffold.dart'; import 'package:super_editor/src/infrastructure/documents/document_scroller.dart'; import 'package:super_editor/src/infrastructure/documents/selection_leader_document_layer.dart'; import 'package:super_editor/src/infrastructure/flutter/build_context.dart'; import 'package:super_editor/src/infrastructure/platforms/android/toolbar.dart'; +import 'package:super_editor/src/infrastructure/platforms/ios/ios_system_context_menu.dart'; import 'package:super_editor/src/infrastructure/platforms/ios/toolbar.dart'; import 'package:super_editor/src/infrastructure/platforms/mac/mac_ime.dart'; +import 'package:super_editor/src/infrastructure/platforms/mobile_documents.dart'; import 'package:super_editor/src/infrastructure/platforms/platform.dart'; +import 'package:super_editor/src/infrastructure/render_sliver_ext.dart'; import 'package:super_editor/src/infrastructure/signal_notifier.dart'; import 'package:super_editor/src/infrastructure/text_input.dart'; import 'package:super_editor/src/undo_redo.dart'; -import 'package:super_editor/src/infrastructure/render_sliver_ext.dart'; import 'package:super_text_layout/super_text_layout.dart'; -import '../infrastructure/document_gestures_interaction_overrides.dart'; -import '../infrastructure/platforms/ios/ios_system_context_menu.dart'; -import '../infrastructure/platforms/mobile_documents.dart'; -import 'attributions.dart'; -import 'blockquote.dart'; -import 'document_caret_overlay.dart'; -import 'document_focus_and_selection_policies.dart'; -import 'document_gestures_mouse.dart'; -import 'document_hardware_keyboard/document_input_keyboard.dart'; -import 'document_ime/document_input_ime.dart'; -import 'horizontal_rule.dart'; -import 'image.dart'; -import 'layout_single_column/layout_single_column.dart'; -import 'paragraph.dart'; -import 'text.dart'; -import 'unknown_component.dart'; - /// A rich text editor that displays a document in a single-column layout. /// /// A [SuperEditor] brings together the key pieces needed to display a user-editable document: @@ -128,6 +128,7 @@ class SuperEditor extends StatefulWidget { this.keyboardActions, this.selectorHandlers, this.gestureMode, + this.dragAutoScrollBoundary = const AxisOffset.symmetric(54), this.contentTapDelegateFactories = const [superEditorLaunchLinkTapHandlerFactory], this.selectionLayerLinks, this.documentUnderlayBuilders = const [], @@ -278,6 +279,11 @@ class SuperEditor extends StatefulWidget { /// The `SuperEditor` gesture mode, e.g., mouse or touch. final DocumentGestureMode? gestureMode; + /// The closest that the caret/selection extent can get to the viewport boundary + /// before SuperEditor auto-scrolls. + /// Increase `trailing` to auto-scroll earlier near the bottom. + final AxisOffset dragAutoScrollBoundary; + /// List of factories that creates a [ContentTapDelegate], which is given an /// opportunity to respond to taps on content before the editor, itself. /// @@ -910,6 +916,7 @@ class SuperEditorState extends State { ], scrollController: _scrollController, dragHandleAutoScroller: _dragHandleAutoScroller, + dragAutoScrollBoundary: widget.dragAutoScrollBoundary, fillViewport: fillViewport, showDebugPaint: widget.debugPaint.gestures, child: child, @@ -932,6 +939,7 @@ class SuperEditorState extends State { ], scrollController: _scrollController, dragHandleAutoScroller: _dragHandleAutoScroller, + dragAutoScrollBoundary: widget.dragAutoScrollBoundary, fillViewport: fillViewport, showDebugPaint: widget.debugPaint.gestures, child: child,