Fix: Dividers not shown in toolbar when multiRowsDisplay.

Fix: Toolbar drop buttons clipped when !multiRowsDisplay
pull/1843/head
Douglas Ward 12 months ago
parent 1db1f8b0ee
commit e76daa27b1
  1. 137
      lib/src/widgets/toolbar/simple_toolbar.dart

@ -7,10 +7,8 @@ import '../utils/provider.dart';
import 'base_toolbar.dart'; import 'base_toolbar.dart';
import 'buttons/alignment/select_alignment_buttons.dart'; import 'buttons/alignment/select_alignment_buttons.dart';
import 'buttons/arrow_indicated_list_button.dart'; import 'buttons/arrow_indicated_list_button.dart';
import 'buttons/clipboard_button.dart';
class QuillSimpleToolbar extends StatelessWidget class QuillSimpleToolbar extends StatelessWidget implements PreferredSizeWidget {
implements PreferredSizeWidget {
const QuillSimpleToolbar({ const QuillSimpleToolbar({
required this.configurations, required this.configurations,
super.key, super.key,
@ -19,6 +17,8 @@ class QuillSimpleToolbar extends StatelessWidget
/// The configurations for the toolbar widget of flutter quill /// The configurations for the toolbar widget of flutter quill
final QuillSimpleToolbarConfigurations configurations; final QuillSimpleToolbarConfigurations configurations;
double get _toolbarSize => configurations.toolbarSize * 1.4;
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
final theEmbedButtons = configurations.embedButtons; final theEmbedButtons = configurations.embedButtons;
@ -36,29 +36,29 @@ class QuillSimpleToolbar extends StatelessWidget
configurations.showBackgroundColorButton || configurations.showBackgroundColorButton ||
configurations.showClearFormat || configurations.showClearFormat ||
theEmbedButtons?.isNotEmpty == true, theEmbedButtons?.isNotEmpty == true,
configurations.showLeftAlignment || configurations.showLeftAlignment || configurations.showCenterAlignment || configurations.showRightAlignment || configurations.showJustifyAlignment || configurations.showDirection,
configurations.showCenterAlignment ||
configurations.showRightAlignment ||
configurations.showJustifyAlignment ||
configurations.showDirection,
configurations.showHeaderStyle, configurations.showHeaderStyle,
configurations.showListNumbers || configurations.showListNumbers || configurations.showListBullets || configurations.showListCheck || configurations.showCodeBlock,
configurations.showListBullets ||
configurations.showListCheck ||
configurations.showCodeBlock,
configurations.showQuote || configurations.showIndent, configurations.showQuote || configurations.showIndent,
configurations.showLink || configurations.showSearchButton configurations.showLink || configurations.showSearchButton
]; ];
List<Widget> childrenBuilder(BuildContext context) { List<Widget> childrenBuilder(BuildContext context) {
final toolbarConfigurations = final toolbarConfigurations = context.requireQuillSimpleToolbarConfigurations;
context.requireQuillSimpleToolbarConfigurations;
final globalIconSize = toolbarConfigurations.buttonOptions.base.iconSize; final globalIconSize = toolbarConfigurations.buttonOptions.base.iconSize;
final axis = toolbarConfigurations.axis; final axis = toolbarConfigurations.axis;
final globalController = configurations.controller; final globalController = configurations.controller;
final divider = SizedBox(
height: _toolbarSize,
child: QuillToolbarDivider(
axis,
color: configurations.sectionDividerColor,
space: configurations.sectionDividerSpace,
));
return [ return [
if (configurations.showUndo) if (configurations.showUndo)
QuillToolbarHistoryButton( QuillToolbarHistoryButton(
@ -148,29 +148,13 @@ class QuillSimpleToolbar extends StatelessWidget
options: toolbarConfigurations.buttonOptions.clearFormat, options: toolbarConfigurations.buttonOptions.clearFormat,
), ),
if (theEmbedButtons != null) if (theEmbedButtons != null)
for (final builder in theEmbedButtons) for (final builder in theEmbedButtons) builder(globalController, globalIconSize ?? kDefaultIconSize, context.quillToolbarBaseButtonOptions?.iconTheme, configurations.dialogTheme),
builder( if (configurations.showDividers && isButtonGroupShown[0] && (isButtonGroupShown[1] || isButtonGroupShown[2] || isButtonGroupShown[3] || isButtonGroupShown[4] || isButtonGroupShown[5]))
globalController, divider,
globalIconSize ?? kDefaultIconSize,
context.quillToolbarBaseButtonOptions?.iconTheme,
configurations.dialogTheme),
if (configurations.showDividers &&
isButtonGroupShown[0] &&
(isButtonGroupShown[1] ||
isButtonGroupShown[2] ||
isButtonGroupShown[3] ||
isButtonGroupShown[4] ||
isButtonGroupShown[5]))
QuillToolbarDivider(
axis,
color: configurations.sectionDividerColor,
space: configurations.sectionDividerSpace,
),
if (configurations.showAlignmentButtons) if (configurations.showAlignmentButtons)
QuillToolbarSelectAlignmentButtons( QuillToolbarSelectAlignmentButtons(
controller: globalController, controller: globalController,
options: toolbarConfigurations.buttonOptions.selectAlignmentButtons options: toolbarConfigurations.buttonOptions.selectAlignmentButtons.copyWith(
.copyWith(
showLeftAlignment: configurations.showLeftAlignment, showLeftAlignment: configurations.showLeftAlignment,
showCenterAlignment: configurations.showCenterAlignment, showCenterAlignment: configurations.showCenterAlignment,
showRightAlignment: configurations.showRightAlignment, showRightAlignment: configurations.showRightAlignment,
@ -183,42 +167,20 @@ class QuillSimpleToolbar extends StatelessWidget
options: toolbarConfigurations.buttonOptions.direction, options: toolbarConfigurations.buttonOptions.direction,
controller: globalController, controller: globalController,
), ),
if (configurations.showDividers && if (configurations.showDividers && isButtonGroupShown[1] && (isButtonGroupShown[2] || isButtonGroupShown[3] || isButtonGroupShown[4] || isButtonGroupShown[5])) divider,
isButtonGroupShown[1] &&
(isButtonGroupShown[2] ||
isButtonGroupShown[3] ||
isButtonGroupShown[4] ||
isButtonGroupShown[5]))
QuillToolbarDivider(
axis,
color: configurations.sectionDividerColor,
space: configurations.sectionDividerSpace,
),
if (configurations.showHeaderStyle) ...[ if (configurations.showHeaderStyle) ...[
if (configurations.headerStyleType.isOriginal) if (configurations.headerStyleType.isOriginal)
QuillToolbarSelectHeaderStyleDropdownButton( QuillToolbarSelectHeaderStyleDropdownButton(
controller: globalController, controller: globalController,
options: toolbarConfigurations options: toolbarConfigurations.buttonOptions.selectHeaderStyleDropdownButton,
.buttonOptions.selectHeaderStyleDropdownButton,
) )
else else
QuillToolbarSelectHeaderStyleButtons( QuillToolbarSelectHeaderStyleButtons(
controller: globalController, controller: globalController,
options: options: toolbarConfigurations.buttonOptions.selectHeaderStyleButtons,
toolbarConfigurations.buttonOptions.selectHeaderStyleButtons,
), ),
], ],
if (configurations.showDividers && if (configurations.showDividers && configurations.showHeaderStyle && isButtonGroupShown[2] && (isButtonGroupShown[3] || isButtonGroupShown[4] || isButtonGroupShown[5])) divider,
configurations.showHeaderStyle &&
isButtonGroupShown[2] &&
(isButtonGroupShown[3] ||
isButtonGroupShown[4] ||
isButtonGroupShown[5]))
QuillToolbarDivider(
axis,
color: configurations.sectionDividerColor,
space: configurations.sectionDividerSpace,
),
if (configurations.showListNumbers) if (configurations.showListNumbers)
QuillToolbarToggleStyleButton( QuillToolbarToggleStyleButton(
attribute: Attribute.ol, attribute: Attribute.ol,
@ -242,14 +204,8 @@ class QuillSimpleToolbar extends StatelessWidget
options: toolbarConfigurations.buttonOptions.codeBlock, options: toolbarConfigurations.buttonOptions.codeBlock,
controller: globalController, controller: globalController,
), ),
if (configurations.showDividers && if (configurations.showDividers && isButtonGroupShown[3] && (isButtonGroupShown[4] || isButtonGroupShown[5])) ...[
isButtonGroupShown[3] && divider,
(isButtonGroupShown[4] || isButtonGroupShown[5])) ...[
QuillToolbarDivider(
axis,
color: configurations.sectionDividerColor,
space: configurations.sectionDividerSpace,
),
], ],
if (configurations.showQuote) if (configurations.showQuote)
QuillToolbarToggleStyleButton( QuillToolbarToggleStyleButton(
@ -269,14 +225,7 @@ class QuillSimpleToolbar extends StatelessWidget
isIncrease: false, isIncrease: false,
options: toolbarConfigurations.buttonOptions.indentDecrease, options: toolbarConfigurations.buttonOptions.indentDecrease,
), ),
if (configurations.showDividers && if (configurations.showDividers && isButtonGroupShown[4] && isButtonGroupShown[5]) divider,
isButtonGroupShown[4] &&
isButtonGroupShown[5])
QuillToolbarDivider(
axis,
color: configurations.sectionDividerColor,
space: configurations.sectionDividerSpace,
),
if (configurations.showLink) if (configurations.showLink)
toolbarConfigurations.linkStyleType.isOriginal toolbarConfigurations.linkStyleType.isOriginal
? QuillToolbarLinkStyleButton( ? QuillToolbarLinkStyleButton(
@ -292,33 +241,26 @@ class QuillSimpleToolbar extends StatelessWidget
controller: globalController, controller: globalController,
options: toolbarConfigurations.buttonOptions.search, options: toolbarConfigurations.buttonOptions.search,
), ),
if (configurations.showClipboardCut) if (configurations.showClipboardCut)
QuillToolbarClipboardButton( QuillToolbarClipboardButton(
options: toolbarConfigurations.buttonOptions.clipboardCut, options: toolbarConfigurations.buttonOptions.clipboardCut,
controller: globalController, controller: globalController,
clipboard: ClipboardAction.cut, clipboardAction: ClipboardAction.cut,
), ),
if (configurations.showClipboardCopy) if (configurations.showClipboardCopy)
QuillToolbarClipboardButton( QuillToolbarClipboardButton(
options: toolbarConfigurations.buttonOptions.clipboardCopy, options: toolbarConfigurations.buttonOptions.clipboardCopy,
controller: globalController, controller: globalController,
clipboard: ClipboardAction.copy, clipboardAction: ClipboardAction.copy,
), ),
if (configurations.showClipboardPaste) if (configurations.showClipboardPaste)
QuillToolbarClipboardButton( QuillToolbarClipboardButton(
options: toolbarConfigurations.buttonOptions.clipboardPaste, options: toolbarConfigurations.buttonOptions.clipboardPaste,
controller: globalController, controller: globalController,
clipboard: ClipboardAction.paste, clipboardAction: ClipboardAction.paste,
), ),
if (configurations.customButtons.isNotEmpty) ...[ if (configurations.customButtons.isNotEmpty) ...[
if (configurations.showDividers) if (configurations.showDividers) divider,
QuillToolbarDivider(
axis,
color: configurations.sectionDividerColor,
space: configurations.sectionDividerSpace,
),
for (final customButton in configurations.customButtons) for (final customButton in configurations.customButtons)
QuillToolbarCustomButton( QuillToolbarCustomButton(
options: customButton, options: customButton,
@ -363,16 +305,11 @@ class QuillSimpleToolbar extends StatelessWidget
return Container( return Container(
decoration: configurations.decoration ?? decoration: configurations.decoration ??
BoxDecoration( BoxDecoration(
color: color: configurations.color ?? Theme.of(context).canvasColor,
configurations.color ?? Theme.of(context).canvasColor,
), ),
constraints: BoxConstraints.tightFor( constraints: BoxConstraints.tightFor(
height: configurations.axis == Axis.horizontal height: configurations.axis == Axis.horizontal ? _toolbarSize : null,
? configurations.toolbarSize width: configurations.axis == Axis.vertical ? _toolbarSize : null,
: null,
width: configurations.axis == Axis.vertical
? configurations.toolbarSize
: null,
), ),
child: QuillToolbarArrowIndicatedButtonList( child: QuillToolbarArrowIndicatedButtonList(
axis: configurations.axis, axis: configurations.axis,
@ -386,9 +323,7 @@ class QuillSimpleToolbar extends StatelessWidget
} }
@override @override
Size get preferredSize => configurations.axis == Axis.horizontal Size get preferredSize => configurations.axis == Axis.horizontal ? const Size.fromHeight(kDefaultToolbarSize) : const Size.fromWidth(kDefaultToolbarSize);
? const Size.fromHeight(kDefaultToolbarSize)
: const Size.fromWidth(kDefaultToolbarSize);
} }
/// The divider which is used for separation of buttons in the toolbar. /// The divider which is used for separation of buttons in the toolbar.
@ -404,12 +339,10 @@ class QuillToolbarDivider extends StatelessWidget {
}); });
/// Provides a horizontal divider for vertical toolbar. /// Provides a horizontal divider for vertical toolbar.
const QuillToolbarDivider.horizontal({Key? key, Color? color, double? space}) const QuillToolbarDivider.horizontal({Key? key, Color? color, double? space}) : this(Axis.horizontal, color: color, space: space, key: key);
: this(Axis.horizontal, color: color, space: space, key: key);
/// Provides a horizontal divider for horizontal toolbar. /// Provides a horizontal divider for horizontal toolbar.
const QuillToolbarDivider.vertical({Key? key, Color? color, double? space}) const QuillToolbarDivider.vertical({Key? key, Color? color, double? space}) : this(Axis.vertical, color: color, space: space, key: key);
: this(Axis.vertical, color: color, space: space, key: key);
/// The axis along which the toolbar is. /// The axis along which the toolbar is.
final Axis axis; final Axis axis;

Loading…
Cancel
Save