diff --git a/CHANGELOG.md b/CHANGELOG.md index 5776f039..f406c647 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -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] - Fix null error in line.dart [#1487](https://github.com/singerdmx/flutter-quill/issues/1487) diff --git a/lib/src/models/config/toolbar/configurations.dart b/lib/src/models/config/toolbar/configurations.dart index 533ac8fb..00412042 100644 --- a/lib/src/models/config/toolbar/configurations.dart +++ b/lib/src/models/config/toolbar/configurations.dart @@ -1,7 +1,7 @@ import 'package:equatable/equatable.dart'; import 'package:flutter/foundation.dart' show immutable; import 'package:flutter/widgets.dart' - show Axis, Color, Decoration, WrapAlignment, WrapCrossAlignment; + show Axis, Color, Decoration, Widget, WrapAlignment, WrapCrossAlignment; import '../../../widgets/embeds.dart'; import '../../structs/link_dialog_action.dart'; @@ -107,6 +107,7 @@ class QuillToolbarConfigurations extends Equatable { this.color, this.sectionDividerColor, this.sectionDividerSpace, + this.spacerWidget, /// By default it will calculated based on the [globalIconSize] from /// [base] in [QuillToolbarButtonOptions] @@ -130,6 +131,15 @@ class QuillToolbarConfigurations extends Equatable { /// If you want change spesefic buttons or all of them /// then you came to the right place 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; /// By default it will be diff --git a/lib/src/widgets/toolbar/toolbar.dart b/lib/src/widgets/toolbar/toolbar.dart index 092f5012..6749f0b5 100644 --- a/lib/src/widgets/toolbar/toolbar.dart +++ b/lib/src/widgets/toolbar/toolbar.dart @@ -70,36 +70,47 @@ class QuillToolbar extends StatelessWidget { final axis = toolbarConfigurations.axis; final globalController = context.requireQuillController; + final spacerWidget = + configurations.spacerWidget ?? const SizedBox.shrink(); + return [ - if (configurations.showUndo) + if (configurations.showUndo) ...[ QuillToolbarHistoryButton( options: toolbarConfigurations.buttonOptions.undoHistory, controller: toolbarConfigurations .buttonOptions.undoHistory.controller ?? globalController, ), - if (configurations.showRedo) + spacerWidget, + ], + if (configurations.showRedo) ...[ QuillToolbarHistoryButton( options: toolbarConfigurations.buttonOptions.redoHistory, controller: toolbarConfigurations .buttonOptions.redoHistory.controller ?? globalController, ), - if (configurations.showFontFamily) + spacerWidget, + ], + if (configurations.showFontFamily) ...[ QuillToolbarFontFamilyButton( options: toolbarConfigurations.buttonOptions.fontFamily, controller: toolbarConfigurations .buttonOptions.fontFamily.controller ?? globalController, ), - if (configurations.showFontSize) + spacerWidget, + ], + if (configurations.showFontSize) ...[ QuillToolbarFontSizeButton( options: toolbarConfigurations.buttonOptions.fontSize, controller: toolbarConfigurations .buttonOptions.fontFamily.controller ?? globalController, ), - if (configurations.showBoldButton) + spacerWidget, + ], + if (configurations.showBoldButton) ...[ QuillToolbarToggleStyleButton( attribute: Attribute.bold, options: toolbarConfigurations.buttonOptions.bold, @@ -107,7 +118,9 @@ class QuillToolbar extends StatelessWidget { toolbarConfigurations.buttonOptions.bold.controller ?? globalController, ), - if (configurations.showSubscript) + spacerWidget, + ], + if (configurations.showSubscript) ...[ QuillToolbarToggleStyleButton( attribute: Attribute.subscript, options: toolbarConfigurations.buttonOptions.subscript, @@ -115,7 +128,9 @@ class QuillToolbar extends StatelessWidget { .buttonOptions.subscript.controller ?? globalController, ), - if (configurations.showSuperscript) + spacerWidget, + ], + if (configurations.showSuperscript) ...[ QuillToolbarToggleStyleButton( attribute: Attribute.superscript, options: toolbarConfigurations.buttonOptions.superscript, @@ -123,7 +138,9 @@ class QuillToolbar extends StatelessWidget { .buttonOptions.superscript.controller ?? globalController, ), - if (configurations.showItalicButton) + spacerWidget, + ], + if (configurations.showItalicButton) ...[ QuillToolbarToggleStyleButton( attribute: Attribute.italic, options: toolbarConfigurations.buttonOptions.italic, @@ -131,7 +148,9 @@ class QuillToolbar extends StatelessWidget { toolbarConfigurations.buttonOptions.italic.controller ?? globalController, ), - if (configurations.showSmallButton) + spacerWidget, + ], + if (configurations.showSmallButton) ...[ QuillToolbarToggleStyleButton( attribute: Attribute.small, options: toolbarConfigurations.buttonOptions.small, @@ -139,7 +158,9 @@ class QuillToolbar extends StatelessWidget { toolbarConfigurations.buttonOptions.small.controller ?? globalController, ), - if (configurations.showUnderLineButton) + spacerWidget, + ], + if (configurations.showUnderLineButton) ...[ QuillToolbarToggleStyleButton( attribute: Attribute.underline, options: toolbarConfigurations.buttonOptions.underLine, @@ -147,7 +168,9 @@ class QuillToolbar extends StatelessWidget { .buttonOptions.underLine.controller ?? globalController, ), - if (configurations.showStrikeThrough) + spacerWidget, + ], + if (configurations.showStrikeThrough) ...[ QuillToolbarToggleStyleButton( attribute: Attribute.strikeThrough, options: toolbarConfigurations.buttonOptions.strikeThrough, @@ -155,7 +178,9 @@ class QuillToolbar extends StatelessWidget { .buttonOptions.strikeThrough.controller ?? globalController, ), - if (configurations.showInlineCode) + spacerWidget, + ], + if (configurations.showInlineCode) ...[ QuillToolbarToggleStyleButton( attribute: Attribute.inlineCode, options: toolbarConfigurations.buttonOptions.inlineCode, @@ -163,23 +188,31 @@ class QuillToolbar extends StatelessWidget { .buttonOptions.inlineCode.controller ?? globalController, ), - if (configurations.showColorButton) + spacerWidget, + ], + if (configurations.showColorButton) ...[ QuillToolbarColorButton( controller: controller, isBackground: false, options: toolbarConfigurations.buttonOptions.color, ), - if (configurations.showBackgroundColorButton) + spacerWidget, + ], + if (configurations.showBackgroundColorButton) ...[ QuillToolbarColorButton( options: toolbarConfigurations.buttonOptions.backgroundColor, controller: controller, isBackground: true, ), - if (configurations.showClearFormat) + spacerWidget, + ], + if (configurations.showClearFormat) ...[ QuillToolbarClearFormatButton( controller: controller, options: toolbarConfigurations.buttonOptions.clearFormat, ), + spacerWidget, + ], if (theEmbedButtons != null) for (final builder in theEmbedButtons) builder( @@ -199,7 +232,7 @@ class QuillToolbar extends StatelessWidget { color: configurations.sectionDividerColor, space: configurations.sectionDividerSpace, ), - if (configurations.showAlignmentButtons) + if (configurations.showAlignmentButtons) ...[ QuillToolbarSelectAlignmentButton( controller: controller, options: toolbarConfigurations @@ -216,7 +249,9 @@ class QuillToolbar extends StatelessWidget { showRightAlignment: configurations.showRightAlignment, showJustifyAlignment: configurations.showJustifyAlignment, ), - if (configurations.showDirection) + spacerWidget, + ], + if (configurations.showDirection) ...[ QuillToolbarToggleStyleButton( attribute: Attribute.rtl, options: toolbarConfigurations.buttonOptions.direction, @@ -224,6 +259,8 @@ class QuillToolbar extends StatelessWidget { .buttonOptions.direction.controller ?? context.requireQuillController, ), + spacerWidget, + ], if (configurations.showDividers && isButtonGroupShown[1] && (isButtonGroupShown[2] || @@ -235,12 +272,14 @@ class QuillToolbar extends StatelessWidget { color: configurations.sectionDividerColor, space: configurations.sectionDividerSpace, ), - if (configurations.showHeaderStyle) + if (configurations.showHeaderStyle) ...[ QuillToolbarSelectHeaderStyleButtons( controller: controller, options: toolbarConfigurations .buttonOptions.selectHeaderStyleButtons, ), + spacerWidget, + ], if (configurations.showDividers && configurations.showHeaderStyle && isButtonGroupShown[2] && @@ -252,7 +291,7 @@ class QuillToolbar extends StatelessWidget { color: configurations.sectionDividerColor, space: configurations.sectionDividerSpace, ), - if (configurations.showListNumbers) + if (configurations.showListNumbers) ...[ QuillToolbarToggleStyleButton( attribute: Attribute.ol, options: toolbarConfigurations.buttonOptions.listNumbers, @@ -260,7 +299,9 @@ class QuillToolbar extends StatelessWidget { .buttonOptions.listNumbers.controller ?? globalController, ), - if (configurations.showListBullets) + spacerWidget, + ], + if (configurations.showListBullets) ...[ QuillToolbarToggleStyleButton( attribute: Attribute.ul, options: toolbarConfigurations.buttonOptions.listBullets, @@ -268,14 +309,18 @@ class QuillToolbar extends StatelessWidget { .buttonOptions.listBullets.controller ?? globalController, ), - if (configurations.showListCheck) + spacerWidget, + ], + if (configurations.showListCheck) ...[ QuillToolbarToggleCheckListButton( options: toolbarConfigurations.buttonOptions.toggleCheckList, controller: toolbarConfigurations .buttonOptions.toggleCheckList.controller ?? globalController, ), - if (configurations.showCodeBlock) + spacerWidget, + ], + if (configurations.showCodeBlock) ...[ QuillToolbarToggleStyleButton( attribute: Attribute.codeBlock, options: toolbarConfigurations.buttonOptions.codeBlock, @@ -283,15 +328,18 @@ class QuillToolbar extends StatelessWidget { .buttonOptions.codeBlock.controller ?? globalController, ), + spacerWidget, + ], if (configurations.showDividers && isButtonGroupShown[3] && - (isButtonGroupShown[4] || isButtonGroupShown[5])) + (isButtonGroupShown[4] || isButtonGroupShown[5])) ...[ QuillToolbarDivider( axis, color: configurations.sectionDividerColor, space: configurations.sectionDividerSpace, ), - if (configurations.showQuote) + ], + if (configurations.showQuote) ...[ QuillToolbarToggleStyleButton( options: toolbarConfigurations.buttonOptions.quote, controller: @@ -299,7 +347,9 @@ class QuillToolbar extends StatelessWidget { globalController, attribute: Attribute.blockQuote, ), - if (configurations.showIndent) + spacerWidget, + ], + if (configurations.showIndent) ...[ QuillToolbarIndentButton( controller: toolbarConfigurations .buttonOptions.indentIncrease.controller ?? @@ -307,7 +357,9 @@ class QuillToolbar extends StatelessWidget { isIncrease: true, options: toolbarConfigurations.buttonOptions.indentIncrease, ), - if (configurations.showIndent) + spacerWidget, + ], + if (configurations.showIndent) ...[ QuillToolbarIndentButton( controller: toolbarConfigurations .buttonOptions.indentDecrease.controller ?? @@ -315,6 +367,8 @@ class QuillToolbar extends StatelessWidget { isIncrease: false, options: toolbarConfigurations.buttonOptions.indentDecrease, ), + spacerWidget, + ], if (configurations.showDividers && isButtonGroupShown[4] && isButtonGroupShown[5]) @@ -323,45 +377,51 @@ class QuillToolbar extends StatelessWidget { color: configurations.sectionDividerColor, space: configurations.sectionDividerSpace, ), - if (configurations.showLink) + if (configurations.showLink) ...[ QuillToolbarLinkStyleButton( controller: controller, options: toolbarConfigurations.buttonOptions.linkStyle, ), - if (configurations.showSearchButton) + spacerWidget, + ], + if (configurations.showSearchButton) ...[ QuillToolbarSearchButton( controller: controller, options: toolbarConfigurations.buttonOptions.search, ), - if (configurations.customButtons.isNotEmpty) + spacerWidget, + ], + if (configurations.customButtons.isNotEmpty) ...[ if (configurations.showDividers) QuillToolbarDivider( axis, color: configurations.sectionDividerColor, space: configurations.sectionDividerSpace, ), - for (final customButton in configurations.customButtons) - if (customButton.child != null) ...[ - InkWell( - onTap: customButton.onTap, - child: customButton.child, - ), - ] else ...[ - CustomButton( - onPressed: customButton.onTap, - icon: customButton.iconData ?? - context.quillToolbarBaseButtonOptions?.iconData, - iconColor: customButton.iconColor, - iconSize: customButton.iconSize ?? globalIconSize, - iconTheme: - context.requireQuillToolbarBaseButtonOptions.iconTheme, - afterButtonPressed: customButton.afterButtonPressed ?? - context - .quillToolbarBaseButtonOptions?.afterButtonPressed, - tooltip: customButton.tooltip ?? - context.quillToolbarBaseButtonOptions?.tooltip, - ), - ], + for (final customButton in configurations.customButtons) + if (customButton.child != null) ...[ + InkWell( + onTap: customButton.onTap, + child: customButton.child, + ), + ] else ...[ + CustomButton( + onPressed: customButton.onTap, + icon: customButton.iconData ?? + context.quillToolbarBaseButtonOptions?.iconData, + iconColor: customButton.iconColor, + iconSize: customButton.iconSize ?? globalIconSize, + iconTheme: context + .requireQuillToolbarBaseButtonOptions.iconTheme, + afterButtonPressed: customButton.afterButtonPressed ?? + context.quillToolbarBaseButtonOptions + ?.afterButtonPressed, + tooltip: customButton.tooltip ?? + context.quillToolbarBaseButtonOptions?.tooltip, + ), + ], + spacerWidget, + ], ]; }, ), diff --git a/pubspec.yaml b/pubspec.yaml index 613b42e8..1be2a3a6 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,6 +1,6 @@ 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. -version: 8.1.1 +version: 8.1.2 homepage: https://1o24bbs.com/c/bulletjournal/108 repository: https://github.com/singerdmx/flutter-quill topics: