add scrollBottomInset

pull/142/head
Xun Gong 4 years ago
parent fe6ab738c0
commit 106e54c3fc
  1. 33
      lib/widgets/editor.dart
  2. 8
      lib/widgets/raw_editor.dart
  3. 11
      lib/widgets/text_block.dart

@ -119,6 +119,7 @@ class QuillEditor extends StatefulWidget {
required this.focusNode,
required this.scrollController,
required this.scrollable,
required this.scrollBottomInset,
required this.padding,
required this.autoFocus,
required this.readOnly,
@ -133,7 +134,12 @@ class QuillEditor extends StatefulWidget {
this.keyboardAppearance = Brightness.light,
this.scrollPhysics,
this.onLaunchUrl,
this.embedBuilder = _defaultEmbedBuilder,
this.onTapDown,
this.onTapUp,
this.onSingleLongTapStart,
this.onSingleLongTapMoveUpdate,
this.onSingleLongTapEnd,
this.embedBuilder = _defaultEmbedBuilder
});
factory QuillEditor.basic({
@ -148,6 +154,7 @@ class QuillEditor extends StatefulWidget {
autoFocus: true,
readOnly: readOnly,
expands: false,
scrollBottomInset: 0,
padding: EdgeInsets.zero);
}
@ -155,6 +162,7 @@ class QuillEditor extends StatefulWidget {
final FocusNode focusNode;
final ScrollController scrollController;
final bool scrollable;
final double scrollBottomInset;
final EdgeInsetsGeometry padding;
final bool autoFocus;
final bool? showCursor;
@ -249,6 +257,7 @@ class _QuillEditorState extends State<QuillEditor>
widget.focusNode,
widget.scrollController,
widget.scrollable,
widget.scrollBottomInset,
widget.padding,
widget.readOnly,
widget.placeholder,
@ -282,11 +291,6 @@ class _QuillEditorState extends State<QuillEditor>
widget.keyboardAppearance,
widget.enableInteractiveSelection,
widget.scrollPhysics,
widget.onTapDown,
widget.onTapUp,
widget.onSingleLongTapStart,
widget.onSingleLongTapMoveUpdate,
widget.onSingleLongTapEnd,
widget.embedBuilder),
);
}
@ -569,6 +573,7 @@ class RenderEditor extends RenderEditableContainerBox
RenderEditor(
List<RenderEditableBox>? children,
TextDirection textDirection,
double scrollBottomInset,
EdgeInsetsGeometry padding,
this.document,
this.selection,
@ -581,6 +586,7 @@ class RenderEditor extends RenderEditableContainerBox
children,
document.root,
textDirection,
scrollBottomInset,
padding,
);
@ -639,6 +645,14 @@ class RenderEditor extends RenderEditableContainerBox
markNeedsPaint();
}
void setScrollBottomInset(double value) {
if (scrollBottomInset == value) {
return;
}
scrollBottomInset = value;
markNeedsPaint();
}
@override
List<TextSelectionPoint> getEndpointsForSelection(
TextSelection textSelection) {
@ -911,8 +925,9 @@ class RenderEditor extends RenderEditableContainerBox
child.preferredLineHeight(TextPosition(
offset: selection.extentOffset - child.getContainer().offset)) -
kMargin +
offsetInViewport;
final caretBottom = endpoint.point.dy + kMargin + offsetInViewport;
offsetInViewport +
scrollBottomInset;
final caretBottom = endpoint.point.dy + kMargin + offsetInViewport + scrollBottomInset;
double? dy;
if (caretTop < scrollOffset) {
dy = caretTop;
@ -939,6 +954,7 @@ class RenderEditableContainerBox extends RenderBox
List<RenderEditableBox>? children,
this._container,
this.textDirection,
this.scrollBottomInset,
this._padding,
) : assert(_padding.isNonNegative) {
addAll(children);
@ -947,6 +963,7 @@ class RenderEditableContainerBox extends RenderBox
container_node.Container _container;
TextDirection textDirection;
EdgeInsetsGeometry _padding;
double scrollBottomInset;
EdgeInsets? _resolvedPadding;
container_node.Container getContainer() {

@ -34,6 +34,7 @@ class RawEditor extends StatefulWidget {
this.focusNode,
this.scrollController,
this.scrollable,
this.scrollBottomInset,
this.padding,
this.readOnly,
this.placeholder,
@ -65,6 +66,7 @@ class RawEditor extends StatefulWidget {
final FocusNode focusNode;
final ScrollController scrollController;
final bool scrollable;
final double scrollBottomInset;
final EdgeInsetsGeometry padding;
final bool readOnly;
final String? placeholder;
@ -527,6 +529,7 @@ class RawEditorState extends EditorState
startHandleLayerLink: _startHandleLayerLink,
endHandleLayerLink: _endHandleLayerLink,
onSelectionChanged: _handleSelectionChanged,
scrollBottomInset: widget.scrollBottomInset,
padding: widget.padding,
children: _buildChildren(_doc, context),
),
@ -588,6 +591,7 @@ class RawEditorState extends EditorState
final editableTextBlock = EditableTextBlock(
node,
_textDirection,
widget.scrollBottomInset,
_getVerticalSpacingForBlock(node, _styles),
widget.controller.selection,
widget.selectionColor,
@ -1137,6 +1141,7 @@ class _Editor extends MultiChildRenderObjectWidget {
required this.startHandleLayerLink,
required this.endHandleLayerLink,
required this.onSelectionChanged,
required this.scrollBottomInset,
this.padding = EdgeInsets.zero,
}) : super(key: key, children: children);
@ -1147,6 +1152,7 @@ class _Editor extends MultiChildRenderObjectWidget {
final LayerLink startHandleLayerLink;
final LayerLink endHandleLayerLink;
final TextSelectionChangedHandler onSelectionChanged;
final double scrollBottomInset;
final EdgeInsetsGeometry padding;
@override
@ -1154,6 +1160,7 @@ class _Editor extends MultiChildRenderObjectWidget {
return RenderEditor(
null,
textDirection,
scrollBottomInset,
padding,
document,
selection,
@ -1177,6 +1184,7 @@ class _Editor extends MultiChildRenderObjectWidget {
..setStartHandleLayerLink(startHandleLayerLink)
..setEndHandleLayerLink(endHandleLayerLink)
..onSelectionChanged = onSelectionChanged
..setScrollBottomInset(scrollBottomInset)
..setPadding(padding);
}
}

@ -50,6 +50,7 @@ class EditableTextBlock extends StatelessWidget {
const EditableTextBlock(
this.block,
this.textDirection,
this.scrollBottomInset,
this.verticalSpacing,
this.textSelection,
this.color,
@ -64,6 +65,7 @@ class EditableTextBlock extends StatelessWidget {
final Block block;
final TextDirection textDirection;
final double scrollBottomInset;
final Tuple2 verticalSpacing;
final TextSelection textSelection;
final Color color;
@ -84,6 +86,7 @@ class EditableTextBlock extends StatelessWidget {
block,
textDirection,
verticalSpacing as Tuple2<double, double>,
scrollBottomInset,
_getDecorationForBlock(block, defaultStyles) ?? const BoxDecoration(),
contentPadding,
_buildChildren(context, indentLevelCounts));
@ -256,6 +259,7 @@ class RenderEditableTextBlock extends RenderEditableContainerBox
required Block block,
required TextDirection textDirection,
required EdgeInsetsGeometry padding,
required double scrollBottomInset,
required Decoration decoration,
List<RenderEditableBox>? children,
ImageConfiguration configuration = ImageConfiguration.empty,
@ -268,6 +272,7 @@ class RenderEditableTextBlock extends RenderEditableContainerBox
children,
block,
textDirection,
scrollBottomInset,
padding.add(contentPadding),
);
@ -512,14 +517,16 @@ class _EditableBlock extends MultiChildRenderObjectWidget {
this.block,
this.textDirection,
this.padding,
this.scrollBottomInset,
this.decoration,
this.contentPadding,
List<Widget> children,
List<Widget> children
) : super(children: children);
final Block block;
final TextDirection textDirection;
final Tuple2<double, double> padding;
final double scrollBottomInset;
final Decoration decoration;
final EdgeInsets? contentPadding;
@ -534,6 +541,7 @@ class _EditableBlock extends MultiChildRenderObjectWidget {
block: block,
textDirection: textDirection,
padding: _padding,
scrollBottomInset: scrollBottomInset,
decoration: decoration,
contentPadding: _contentPadding,
);
@ -545,6 +553,7 @@ class _EditableBlock extends MultiChildRenderObjectWidget {
renderObject
..setContainer(block)
..textDirection = textDirection
..scrollBottomInset = scrollBottomInset
..setPadding(_padding)
..decoration = decoration
..contentPadding = _contentPadding;

Loading…
Cancel
Save