Add spacer widget

pull/1486/head
Ellet 1 year ago
parent fe372d9a2a
commit 19facd4241
No known key found for this signature in database
GPG Key ID: C488CC70BBCEF0D1
  1. 6
      CHANGELOG.md
  2. 12
      lib/src/models/config/toolbar/configurations.dart
  3. 162
      lib/src/widgets/toolbar/toolbar.dart
  4. 2
      pubspec.yaml

@ -1,3 +1,9 @@
## [8.1.2]
- Fix bug that is related to the regexp of the insert link dialog
- Require dart 3 as minimum
- Code cleanup
- Add spacer widget between each button in the `QuillToolbar`
## [8.1.1] ## [8.1.1]
- Fix null error in line.dart [#1487](https://github.com/singerdmx/flutter-quill/issues/1487) - Fix null error in line.dart [#1487](https://github.com/singerdmx/flutter-quill/issues/1487)

@ -1,7 +1,7 @@
import 'package:equatable/equatable.dart'; import 'package:equatable/equatable.dart';
import 'package:flutter/foundation.dart' show immutable; import 'package:flutter/foundation.dart' show immutable;
import 'package:flutter/widgets.dart' import 'package:flutter/widgets.dart'
show Axis, Color, Decoration, WrapAlignment, WrapCrossAlignment; show Axis, Color, Decoration, Widget, WrapAlignment, WrapCrossAlignment;
import '../../../widgets/embeds.dart'; import '../../../widgets/embeds.dart';
import '../../structs/link_dialog_action.dart'; import '../../structs/link_dialog_action.dart';
@ -107,6 +107,7 @@ class QuillToolbarConfigurations extends Equatable {
this.color, this.color,
this.sectionDividerColor, this.sectionDividerColor,
this.sectionDividerSpace, this.sectionDividerSpace,
this.spacerWidget,
/// By default it will calculated based on the [globalIconSize] from /// By default it will calculated based on the [globalIconSize] from
/// [base] in [QuillToolbarButtonOptions] /// [base] in [QuillToolbarButtonOptions]
@ -130,6 +131,15 @@ class QuillToolbarConfigurations extends Equatable {
/// If you want change spesefic buttons or all of them /// If you want change spesefic buttons or all of them
/// then you came to the right place /// then you came to the right place
final QuillToolbarButtonOptions buttonOptions; final QuillToolbarButtonOptions buttonOptions;
/// A widget that will placed between each button in the toolbar
/// can be used as a spacer
/// it will not used before the first button
/// it will not used after the last button
/// it will also not used in the toolbar dividers
/// Default value will be [SizedBox.shrink()]
/// some widgets like the header styles will be considered as one widget
final Widget? spacerWidget;
final bool multiRowsDisplay; final bool multiRowsDisplay;
/// By default it will be /// By default it will be

@ -70,36 +70,47 @@ class QuillToolbar extends StatelessWidget {
final axis = toolbarConfigurations.axis; final axis = toolbarConfigurations.axis;
final globalController = context.requireQuillController; final globalController = context.requireQuillController;
final spacerWidget =
configurations.spacerWidget ?? const SizedBox.shrink();
return [ return [
if (configurations.showUndo) if (configurations.showUndo) ...[
QuillToolbarHistoryButton( QuillToolbarHistoryButton(
options: toolbarConfigurations.buttonOptions.undoHistory, options: toolbarConfigurations.buttonOptions.undoHistory,
controller: toolbarConfigurations controller: toolbarConfigurations
.buttonOptions.undoHistory.controller ?? .buttonOptions.undoHistory.controller ??
globalController, globalController,
), ),
if (configurations.showRedo) spacerWidget,
],
if (configurations.showRedo) ...[
QuillToolbarHistoryButton( QuillToolbarHistoryButton(
options: toolbarConfigurations.buttonOptions.redoHistory, options: toolbarConfigurations.buttonOptions.redoHistory,
controller: toolbarConfigurations controller: toolbarConfigurations
.buttonOptions.redoHistory.controller ?? .buttonOptions.redoHistory.controller ??
globalController, globalController,
), ),
if (configurations.showFontFamily) spacerWidget,
],
if (configurations.showFontFamily) ...[
QuillToolbarFontFamilyButton( QuillToolbarFontFamilyButton(
options: toolbarConfigurations.buttonOptions.fontFamily, options: toolbarConfigurations.buttonOptions.fontFamily,
controller: toolbarConfigurations controller: toolbarConfigurations
.buttonOptions.fontFamily.controller ?? .buttonOptions.fontFamily.controller ??
globalController, globalController,
), ),
if (configurations.showFontSize) spacerWidget,
],
if (configurations.showFontSize) ...[
QuillToolbarFontSizeButton( QuillToolbarFontSizeButton(
options: toolbarConfigurations.buttonOptions.fontSize, options: toolbarConfigurations.buttonOptions.fontSize,
controller: toolbarConfigurations controller: toolbarConfigurations
.buttonOptions.fontFamily.controller ?? .buttonOptions.fontFamily.controller ??
globalController, globalController,
), ),
if (configurations.showBoldButton) spacerWidget,
],
if (configurations.showBoldButton) ...[
QuillToolbarToggleStyleButton( QuillToolbarToggleStyleButton(
attribute: Attribute.bold, attribute: Attribute.bold,
options: toolbarConfigurations.buttonOptions.bold, options: toolbarConfigurations.buttonOptions.bold,
@ -107,7 +118,9 @@ class QuillToolbar extends StatelessWidget {
toolbarConfigurations.buttonOptions.bold.controller ?? toolbarConfigurations.buttonOptions.bold.controller ??
globalController, globalController,
), ),
if (configurations.showSubscript) spacerWidget,
],
if (configurations.showSubscript) ...[
QuillToolbarToggleStyleButton( QuillToolbarToggleStyleButton(
attribute: Attribute.subscript, attribute: Attribute.subscript,
options: toolbarConfigurations.buttonOptions.subscript, options: toolbarConfigurations.buttonOptions.subscript,
@ -115,7 +128,9 @@ class QuillToolbar extends StatelessWidget {
.buttonOptions.subscript.controller ?? .buttonOptions.subscript.controller ??
globalController, globalController,
), ),
if (configurations.showSuperscript) spacerWidget,
],
if (configurations.showSuperscript) ...[
QuillToolbarToggleStyleButton( QuillToolbarToggleStyleButton(
attribute: Attribute.superscript, attribute: Attribute.superscript,
options: toolbarConfigurations.buttonOptions.superscript, options: toolbarConfigurations.buttonOptions.superscript,
@ -123,7 +138,9 @@ class QuillToolbar extends StatelessWidget {
.buttonOptions.superscript.controller ?? .buttonOptions.superscript.controller ??
globalController, globalController,
), ),
if (configurations.showItalicButton) spacerWidget,
],
if (configurations.showItalicButton) ...[
QuillToolbarToggleStyleButton( QuillToolbarToggleStyleButton(
attribute: Attribute.italic, attribute: Attribute.italic,
options: toolbarConfigurations.buttonOptions.italic, options: toolbarConfigurations.buttonOptions.italic,
@ -131,7 +148,9 @@ class QuillToolbar extends StatelessWidget {
toolbarConfigurations.buttonOptions.italic.controller ?? toolbarConfigurations.buttonOptions.italic.controller ??
globalController, globalController,
), ),
if (configurations.showSmallButton) spacerWidget,
],
if (configurations.showSmallButton) ...[
QuillToolbarToggleStyleButton( QuillToolbarToggleStyleButton(
attribute: Attribute.small, attribute: Attribute.small,
options: toolbarConfigurations.buttonOptions.small, options: toolbarConfigurations.buttonOptions.small,
@ -139,7 +158,9 @@ class QuillToolbar extends StatelessWidget {
toolbarConfigurations.buttonOptions.small.controller ?? toolbarConfigurations.buttonOptions.small.controller ??
globalController, globalController,
), ),
if (configurations.showUnderLineButton) spacerWidget,
],
if (configurations.showUnderLineButton) ...[
QuillToolbarToggleStyleButton( QuillToolbarToggleStyleButton(
attribute: Attribute.underline, attribute: Attribute.underline,
options: toolbarConfigurations.buttonOptions.underLine, options: toolbarConfigurations.buttonOptions.underLine,
@ -147,7 +168,9 @@ class QuillToolbar extends StatelessWidget {
.buttonOptions.underLine.controller ?? .buttonOptions.underLine.controller ??
globalController, globalController,
), ),
if (configurations.showStrikeThrough) spacerWidget,
],
if (configurations.showStrikeThrough) ...[
QuillToolbarToggleStyleButton( QuillToolbarToggleStyleButton(
attribute: Attribute.strikeThrough, attribute: Attribute.strikeThrough,
options: toolbarConfigurations.buttonOptions.strikeThrough, options: toolbarConfigurations.buttonOptions.strikeThrough,
@ -155,7 +178,9 @@ class QuillToolbar extends StatelessWidget {
.buttonOptions.strikeThrough.controller ?? .buttonOptions.strikeThrough.controller ??
globalController, globalController,
), ),
if (configurations.showInlineCode) spacerWidget,
],
if (configurations.showInlineCode) ...[
QuillToolbarToggleStyleButton( QuillToolbarToggleStyleButton(
attribute: Attribute.inlineCode, attribute: Attribute.inlineCode,
options: toolbarConfigurations.buttonOptions.inlineCode, options: toolbarConfigurations.buttonOptions.inlineCode,
@ -163,23 +188,31 @@ class QuillToolbar extends StatelessWidget {
.buttonOptions.inlineCode.controller ?? .buttonOptions.inlineCode.controller ??
globalController, globalController,
), ),
if (configurations.showColorButton) spacerWidget,
],
if (configurations.showColorButton) ...[
QuillToolbarColorButton( QuillToolbarColorButton(
controller: controller, controller: controller,
isBackground: false, isBackground: false,
options: toolbarConfigurations.buttonOptions.color, options: toolbarConfigurations.buttonOptions.color,
), ),
if (configurations.showBackgroundColorButton) spacerWidget,
],
if (configurations.showBackgroundColorButton) ...[
QuillToolbarColorButton( QuillToolbarColorButton(
options: toolbarConfigurations.buttonOptions.backgroundColor, options: toolbarConfigurations.buttonOptions.backgroundColor,
controller: controller, controller: controller,
isBackground: true, isBackground: true,
), ),
if (configurations.showClearFormat) spacerWidget,
],
if (configurations.showClearFormat) ...[
QuillToolbarClearFormatButton( QuillToolbarClearFormatButton(
controller: controller, controller: controller,
options: toolbarConfigurations.buttonOptions.clearFormat, options: toolbarConfigurations.buttonOptions.clearFormat,
), ),
spacerWidget,
],
if (theEmbedButtons != null) if (theEmbedButtons != null)
for (final builder in theEmbedButtons) for (final builder in theEmbedButtons)
builder( builder(
@ -199,7 +232,7 @@ class QuillToolbar extends StatelessWidget {
color: configurations.sectionDividerColor, color: configurations.sectionDividerColor,
space: configurations.sectionDividerSpace, space: configurations.sectionDividerSpace,
), ),
if (configurations.showAlignmentButtons) if (configurations.showAlignmentButtons) ...[
QuillToolbarSelectAlignmentButton( QuillToolbarSelectAlignmentButton(
controller: controller, controller: controller,
options: toolbarConfigurations options: toolbarConfigurations
@ -216,7 +249,9 @@ class QuillToolbar extends StatelessWidget {
showRightAlignment: configurations.showRightAlignment, showRightAlignment: configurations.showRightAlignment,
showJustifyAlignment: configurations.showJustifyAlignment, showJustifyAlignment: configurations.showJustifyAlignment,
), ),
if (configurations.showDirection) spacerWidget,
],
if (configurations.showDirection) ...[
QuillToolbarToggleStyleButton( QuillToolbarToggleStyleButton(
attribute: Attribute.rtl, attribute: Attribute.rtl,
options: toolbarConfigurations.buttonOptions.direction, options: toolbarConfigurations.buttonOptions.direction,
@ -224,6 +259,8 @@ class QuillToolbar extends StatelessWidget {
.buttonOptions.direction.controller ?? .buttonOptions.direction.controller ??
context.requireQuillController, context.requireQuillController,
), ),
spacerWidget,
],
if (configurations.showDividers && if (configurations.showDividers &&
isButtonGroupShown[1] && isButtonGroupShown[1] &&
(isButtonGroupShown[2] || (isButtonGroupShown[2] ||
@ -235,12 +272,14 @@ class QuillToolbar extends StatelessWidget {
color: configurations.sectionDividerColor, color: configurations.sectionDividerColor,
space: configurations.sectionDividerSpace, space: configurations.sectionDividerSpace,
), ),
if (configurations.showHeaderStyle) if (configurations.showHeaderStyle) ...[
QuillToolbarSelectHeaderStyleButtons( QuillToolbarSelectHeaderStyleButtons(
controller: controller, controller: controller,
options: toolbarConfigurations options: toolbarConfigurations
.buttonOptions.selectHeaderStyleButtons, .buttonOptions.selectHeaderStyleButtons,
), ),
spacerWidget,
],
if (configurations.showDividers && if (configurations.showDividers &&
configurations.showHeaderStyle && configurations.showHeaderStyle &&
isButtonGroupShown[2] && isButtonGroupShown[2] &&
@ -252,7 +291,7 @@ class QuillToolbar extends StatelessWidget {
color: configurations.sectionDividerColor, color: configurations.sectionDividerColor,
space: configurations.sectionDividerSpace, space: configurations.sectionDividerSpace,
), ),
if (configurations.showListNumbers) if (configurations.showListNumbers) ...[
QuillToolbarToggleStyleButton( QuillToolbarToggleStyleButton(
attribute: Attribute.ol, attribute: Attribute.ol,
options: toolbarConfigurations.buttonOptions.listNumbers, options: toolbarConfigurations.buttonOptions.listNumbers,
@ -260,7 +299,9 @@ class QuillToolbar extends StatelessWidget {
.buttonOptions.listNumbers.controller ?? .buttonOptions.listNumbers.controller ??
globalController, globalController,
), ),
if (configurations.showListBullets) spacerWidget,
],
if (configurations.showListBullets) ...[
QuillToolbarToggleStyleButton( QuillToolbarToggleStyleButton(
attribute: Attribute.ul, attribute: Attribute.ul,
options: toolbarConfigurations.buttonOptions.listBullets, options: toolbarConfigurations.buttonOptions.listBullets,
@ -268,14 +309,18 @@ class QuillToolbar extends StatelessWidget {
.buttonOptions.listBullets.controller ?? .buttonOptions.listBullets.controller ??
globalController, globalController,
), ),
if (configurations.showListCheck) spacerWidget,
],
if (configurations.showListCheck) ...[
QuillToolbarToggleCheckListButton( QuillToolbarToggleCheckListButton(
options: toolbarConfigurations.buttonOptions.toggleCheckList, options: toolbarConfigurations.buttonOptions.toggleCheckList,
controller: toolbarConfigurations controller: toolbarConfigurations
.buttonOptions.toggleCheckList.controller ?? .buttonOptions.toggleCheckList.controller ??
globalController, globalController,
), ),
if (configurations.showCodeBlock) spacerWidget,
],
if (configurations.showCodeBlock) ...[
QuillToolbarToggleStyleButton( QuillToolbarToggleStyleButton(
attribute: Attribute.codeBlock, attribute: Attribute.codeBlock,
options: toolbarConfigurations.buttonOptions.codeBlock, options: toolbarConfigurations.buttonOptions.codeBlock,
@ -283,15 +328,18 @@ class QuillToolbar extends StatelessWidget {
.buttonOptions.codeBlock.controller ?? .buttonOptions.codeBlock.controller ??
globalController, globalController,
), ),
spacerWidget,
],
if (configurations.showDividers && if (configurations.showDividers &&
isButtonGroupShown[3] && isButtonGroupShown[3] &&
(isButtonGroupShown[4] || isButtonGroupShown[5])) (isButtonGroupShown[4] || isButtonGroupShown[5])) ...[
QuillToolbarDivider( QuillToolbarDivider(
axis, axis,
color: configurations.sectionDividerColor, color: configurations.sectionDividerColor,
space: configurations.sectionDividerSpace, space: configurations.sectionDividerSpace,
), ),
if (configurations.showQuote) ],
if (configurations.showQuote) ...[
QuillToolbarToggleStyleButton( QuillToolbarToggleStyleButton(
options: toolbarConfigurations.buttonOptions.quote, options: toolbarConfigurations.buttonOptions.quote,
controller: controller:
@ -299,7 +347,9 @@ class QuillToolbar extends StatelessWidget {
globalController, globalController,
attribute: Attribute.blockQuote, attribute: Attribute.blockQuote,
), ),
if (configurations.showIndent) spacerWidget,
],
if (configurations.showIndent) ...[
QuillToolbarIndentButton( QuillToolbarIndentButton(
controller: toolbarConfigurations controller: toolbarConfigurations
.buttonOptions.indentIncrease.controller ?? .buttonOptions.indentIncrease.controller ??
@ -307,7 +357,9 @@ class QuillToolbar extends StatelessWidget {
isIncrease: true, isIncrease: true,
options: toolbarConfigurations.buttonOptions.indentIncrease, options: toolbarConfigurations.buttonOptions.indentIncrease,
), ),
if (configurations.showIndent) spacerWidget,
],
if (configurations.showIndent) ...[
QuillToolbarIndentButton( QuillToolbarIndentButton(
controller: toolbarConfigurations controller: toolbarConfigurations
.buttonOptions.indentDecrease.controller ?? .buttonOptions.indentDecrease.controller ??
@ -315,6 +367,8 @@ class QuillToolbar extends StatelessWidget {
isIncrease: false, isIncrease: false,
options: toolbarConfigurations.buttonOptions.indentDecrease, options: toolbarConfigurations.buttonOptions.indentDecrease,
), ),
spacerWidget,
],
if (configurations.showDividers && if (configurations.showDividers &&
isButtonGroupShown[4] && isButtonGroupShown[4] &&
isButtonGroupShown[5]) isButtonGroupShown[5])
@ -323,45 +377,51 @@ class QuillToolbar extends StatelessWidget {
color: configurations.sectionDividerColor, color: configurations.sectionDividerColor,
space: configurations.sectionDividerSpace, space: configurations.sectionDividerSpace,
), ),
if (configurations.showLink) if (configurations.showLink) ...[
QuillToolbarLinkStyleButton( QuillToolbarLinkStyleButton(
controller: controller, controller: controller,
options: toolbarConfigurations.buttonOptions.linkStyle, options: toolbarConfigurations.buttonOptions.linkStyle,
), ),
if (configurations.showSearchButton) spacerWidget,
],
if (configurations.showSearchButton) ...[
QuillToolbarSearchButton( QuillToolbarSearchButton(
controller: controller, controller: controller,
options: toolbarConfigurations.buttonOptions.search, options: toolbarConfigurations.buttonOptions.search,
), ),
if (configurations.customButtons.isNotEmpty) spacerWidget,
],
if (configurations.customButtons.isNotEmpty) ...[
if (configurations.showDividers) if (configurations.showDividers)
QuillToolbarDivider( QuillToolbarDivider(
axis, axis,
color: configurations.sectionDividerColor, color: configurations.sectionDividerColor,
space: configurations.sectionDividerSpace, space: configurations.sectionDividerSpace,
), ),
for (final customButton in configurations.customButtons) for (final customButton in configurations.customButtons)
if (customButton.child != null) ...[ if (customButton.child != null) ...[
InkWell( InkWell(
onTap: customButton.onTap, onTap: customButton.onTap,
child: customButton.child, child: customButton.child,
), ),
] else ...[ ] else ...[
CustomButton( CustomButton(
onPressed: customButton.onTap, onPressed: customButton.onTap,
icon: customButton.iconData ?? icon: customButton.iconData ??
context.quillToolbarBaseButtonOptions?.iconData, context.quillToolbarBaseButtonOptions?.iconData,
iconColor: customButton.iconColor, iconColor: customButton.iconColor,
iconSize: customButton.iconSize ?? globalIconSize, iconSize: customButton.iconSize ?? globalIconSize,
iconTheme: iconTheme: context
context.requireQuillToolbarBaseButtonOptions.iconTheme, .requireQuillToolbarBaseButtonOptions.iconTheme,
afterButtonPressed: customButton.afterButtonPressed ?? afterButtonPressed: customButton.afterButtonPressed ??
context context.quillToolbarBaseButtonOptions
.quillToolbarBaseButtonOptions?.afterButtonPressed, ?.afterButtonPressed,
tooltip: customButton.tooltip ?? tooltip: customButton.tooltip ??
context.quillToolbarBaseButtonOptions?.tooltip, context.quillToolbarBaseButtonOptions?.tooltip,
), ),
], ],
spacerWidget,
],
]; ];
}, },
), ),

@ -1,6 +1,6 @@
name: flutter_quill name: flutter_quill
description: A rich text editor built for the modern Android, iOS, web and desktop platforms. It is the WYSIWYG editor and a Quill component for Flutter. description: A rich text editor built for the modern Android, iOS, web and desktop platforms. It is the WYSIWYG editor and a Quill component for Flutter.
version: 8.1.1 version: 8.1.2
homepage: https://1o24bbs.com/c/bulletjournal/108 homepage: https://1o24bbs.com/c/bulletjournal/108
repository: https://github.com/singerdmx/flutter-quill repository: https://github.com/singerdmx/flutter-quill
topics: topics:

Loading…
Cancel
Save