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]
- 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: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

@ -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,
],
];
},
),

@ -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:

Loading…
Cancel
Save