Organize files

pull/1566/head
Ellet 1 year ago
parent 913c33cc80
commit 4b4c148946
No known key found for this signature in database
GPG Key ID: C488CC70BBCEF0D1
  1. 5
      CHANGELOG.md
  2. 8
      example/lib/presentation/quill/quill_toolbar.dart
  3. 15
      lib/flutter_quill.dart
  4. 16
      lib/src/extensions/quill_provider.dart
  5. 10
      lib/src/models/config/editor/configurations.dart
  6. 4
      lib/src/models/config/quill_configurations.dart
  7. 5
      lib/src/models/config/quill_shared_configurations.dart
  8. 10
      lib/src/models/config/raw_editor/configurations.dart
  9. 33
      lib/src/models/config/toolbar/base_toolbar_configurations.dart
  10. 2
      lib/src/models/config/toolbar/buttons/color.dart
  11. 2
      lib/src/models/config/toolbar/buttons/font_family.dart
  12. 4
      lib/src/models/config/toolbar/buttons/font_size.dart
  13. 2
      lib/src/models/config/toolbar/buttons/select_header_style.dart
  14. 317
      lib/src/models/config/toolbar/simple_toolbar_configurations.dart
  15. 312
      lib/src/models/config/toolbar/toolbar_configurations.dart
  16. 2
      lib/src/models/documents/document.dart
  17. 2
      lib/src/models/documents/nodes/container.dart
  18. 2
      lib/src/models/documents/nodes/leaf.dart
  19. 2
      lib/src/models/documents/nodes/line.dart
  20. 2
      lib/src/models/documents/nodes/node.dart
  21. 2
      lib/src/utils/embeds.dart
  22. 12
      lib/src/widgets/editor/editor.dart
  23. 2
      lib/src/widgets/others/box.dart
  24. 20
      lib/src/widgets/others/controller.dart
  25. 2
      lib/src/widgets/others/cursor.dart
  26. 10
      lib/src/widgets/others/default_styles.dart
  27. 8
      lib/src/widgets/others/delegate.dart
  28. 8
      lib/src/widgets/others/embeds.dart
  29. 0
      lib/src/widgets/others/float_cursor.dart
  30. 0
      lib/src/widgets/others/keyboard_listener.dart
  31. 6
      lib/src/widgets/others/link.dart
  32. 0
      lib/src/widgets/others/proxy.dart
  33. 20
      lib/src/widgets/others/text_block.dart
  34. 24
      lib/src/widgets/others/text_line.dart
  35. 4
      lib/src/widgets/others/text_selection.dart
  36. 0
      lib/src/widgets/raw_editor/quill_single_child_scroll_view.dart
  37. 2
      lib/src/widgets/raw_editor/raw_editor_render_object.dart
  38. 20
      lib/src/widgets/raw_editor/raw_editor_state.dart
  39. 2
      lib/src/widgets/style_widgets/number_point.dart
  40. 12
      lib/src/widgets/toolbar/base_toolbar.dart
  41. 2
      lib/src/widgets/toolbar/buttons/clear_format_button.dart
  42. 2
      lib/src/widgets/toolbar/buttons/color/color_button.dart
  43. 2
      lib/src/widgets/toolbar/buttons/custom_button_button.dart
  44. 2
      lib/src/widgets/toolbar/buttons/font_family_button.dart
  45. 2
      lib/src/widgets/toolbar/buttons/font_size_button.dart
  46. 2
      lib/src/widgets/toolbar/buttons/history_button.dart
  47. 2
      lib/src/widgets/toolbar/buttons/indent_button.dart
  48. 4
      lib/src/widgets/toolbar/buttons/link_style2_button.dart
  49. 4
      lib/src/widgets/toolbar/buttons/link_style_button.dart
  50. 2
      lib/src/widgets/toolbar/buttons/search/search_button.dart
  51. 2
      lib/src/widgets/toolbar/buttons/search/search_dialog.dart
  52. 2
      lib/src/widgets/toolbar/buttons/select_alignment_button.dart
  53. 2
      lib/src/widgets/toolbar/buttons/select_header_style_button.dart
  54. 2
      lib/src/widgets/toolbar/buttons/select_header_style_buttons.dart
  55. 2
      lib/src/widgets/toolbar/buttons/toggle_check_list_button.dart
  56. 2
      lib/src/widgets/toolbar/buttons/toggle_style_button.dart
  57. 73
      lib/src/widgets/toolbar/simple_toolbar.dart
  58. 10
      lib/src/widgets/utils/provider.dart
  59. 6
      test/bug_fix_test.dart
  60. 2
      version.dart

@ -2,6 +2,11 @@
All notable changes to this project will be documented in this file. All notable changes to this project will be documented in this file.
## 9.0.0-dev-3
* Breaking Changes:
* Rename `QuillToolbar` to `QuillSimpleToolbar`
* Rename `QuillBaseToolbar` to `QuillToolbar`
## 9.0.0-dev-2 ## 9.0.0-dev-2
* An attemp to fix CI automated publishing * An attemp to fix CI automated publishing

@ -100,8 +100,8 @@ class MyQuillToolbar extends StatelessWidget {
if (state.useCustomQuillToolbar) { if (state.useCustomQuillToolbar) {
// For more info // For more info
// https://github.com/singerdmx/flutter-quill/blob/master/doc/custom_toolbar.md // https://github.com/singerdmx/flutter-quill/blob/master/doc/custom_toolbar.md
return QuillBaseToolbar( return QuillToolbar(
configurations: QuillBaseToolbarConfigurations( configurations: QuillToolbarConfigurations(
toolbarSize: 15 * 2, toolbarSize: 15 * 2,
multiRowsDisplay: false, multiRowsDisplay: false,
buttonOptions: const QuillToolbarButtonOptions( buttonOptions: const QuillToolbarButtonOptions(
@ -224,8 +224,8 @@ class MyQuillToolbar extends StatelessWidget {
), ),
); );
} }
return QuillToolbar( return QuillSimpleToolbar(
configurations: QuillToolbarConfigurations( configurations: QuillSimpleToolbarConfigurations(
controller: controller, controller: controller,
showAlignmentButtons: true, showAlignmentButtons: true,
buttonOptions: QuillToolbarButtonOptions( buttonOptions: QuillToolbarButtonOptions(

@ -3,7 +3,7 @@ library flutter_quill;
export 'src/extensions/quill_provider.dart'; export 'src/extensions/quill_provider.dart';
export 'src/models/config/quill_configurations.dart'; export 'src/models/config/quill_configurations.dart';
export 'src/models/config/raw_editor/configurations.dart'; export 'src/models/config/raw_editor/configurations.dart';
export 'src/models/config/toolbar/base_toolbar_configurations.dart'; export 'src/models/config/toolbar/toolbar_configurations.dart';
export 'src/models/documents/attribute.dart'; export 'src/models/documents/attribute.dart';
export 'src/models/documents/document.dart'; export 'src/models/documents/document.dart';
export 'src/models/documents/nodes/block.dart'; export 'src/models/documents/nodes/block.dart';
@ -22,15 +22,16 @@ export 'src/models/structs/vertical_spacing.dart';
export 'src/models/themes/quill_dialog_theme.dart'; export 'src/models/themes/quill_dialog_theme.dart';
export 'src/models/themes/quill_icon_theme.dart'; export 'src/models/themes/quill_icon_theme.dart';
export 'src/utils/embeds.dart'; export 'src/utils/embeds.dart';
export 'src/widgets/controller.dart'; export 'src/widgets/others/controller.dart';
export 'src/widgets/cursor.dart'; export 'src/widgets/others/cursor.dart';
export 'src/widgets/default_styles.dart'; export 'src/widgets/others/default_styles.dart';
export 'src/widgets/editor/editor.dart'; export 'src/widgets/editor/editor.dart';
export 'src/widgets/embeds.dart'; export 'src/widgets/others/embeds.dart';
export 'src/widgets/link.dart' show LinkActionPickerDelegate, LinkMenuAction; export 'src/widgets/others/link.dart'
show LinkActionPickerDelegate, LinkMenuAction;
export 'src/widgets/raw_editor/raw_editor.dart'; export 'src/widgets/raw_editor/raw_editor.dart';
export 'src/widgets/raw_editor/raw_editor_state.dart'; export 'src/widgets/raw_editor/raw_editor_state.dart';
export 'src/widgets/style_widgets/style_widgets.dart'; export 'src/widgets/style_widgets/style_widgets.dart';
export 'src/widgets/toolbar/base_toolbar.dart'; export 'src/widgets/toolbar/base_toolbar.dart';
export 'src/widgets/toolbar/toolbar.dart'; export 'src/widgets/toolbar/simple_toolbar.dart';
export 'src/widgets/utils/provider.dart'; export 'src/widgets/utils/provider.dart';

@ -68,39 +68,39 @@ extension QuillProviderExt on BuildContext {
return QuillEditorProvider.of(this)?.editorConfigurations; return QuillEditorProvider.of(this)?.editorConfigurations;
} }
/// return [QuillToolbarConfigurations] as not null . Since the quill /// return [QuillSimpleToolbarConfigurations] as not null . Since the quill
/// toolbar configurations is in the [QuillToolbarProvider] /// toolbar configurations is in the [QuillToolbarProvider]
/// then we need to get the /// then we need to get the
/// provider widget first and then we will return toolbar configurations /// provider widget first and then we will return toolbar configurations
/// throw exception if [QuillProvider] is not in the widget tree /// throw exception if [QuillProvider] is not in the widget tree
QuillToolbarConfigurations get requireQuillToolbarConfigurations { QuillSimpleToolbarConfigurations get requireQuillToolbarConfigurations {
return QuillToolbarProvider.ofNotNull(this).toolbarConfigurations; return QuillToolbarProvider.ofNotNull(this).toolbarConfigurations;
} }
/// return nullable [QuillToolbarConfigurations]. Since the quill /// return nullable [QuillSimpleToolbarConfigurations]. Since the quill
/// toolbar configurations is in the [QuillToolbarProvider] /// toolbar configurations is in the [QuillToolbarProvider]
/// then we need to get the /// then we need to get the
/// provider widget first and then we will return toolbar configurations /// provider widget first and then we will return toolbar configurations
/// don't throw exception if [QuillProvider] is not in the widget tree /// don't throw exception if [QuillProvider] is not in the widget tree
QuillToolbarConfigurations? get quillToolbarConfigurations { QuillSimpleToolbarConfigurations? get quillToolbarConfigurations {
return QuillToolbarProvider.of(this)?.toolbarConfigurations; return QuillToolbarProvider.of(this)?.toolbarConfigurations;
} }
/// return [QuillBaseToolbarConfigurations] as not null . Since the quill /// return [QuillToolbarConfigurations] as not null . Since the quill
/// toolbar configurations is in the [QuillBaseToolbarProvider] /// toolbar configurations is in the [QuillBaseToolbarProvider]
/// then we need to get the /// then we need to get the
/// provider widget first and then we will return toolbar configurations /// provider widget first and then we will return toolbar configurations
/// throw exception if [QuillBaseToolbarProvider] is not in the widget tree /// throw exception if [QuillBaseToolbarProvider] is not in the widget tree
QuillBaseToolbarConfigurations get requireQuillBaseToolbarConfigurations { QuillToolbarConfigurations get requireQuillBaseToolbarConfigurations {
return QuillBaseToolbarProvider.ofNotNull(this).toolbarConfigurations; return QuillBaseToolbarProvider.ofNotNull(this).toolbarConfigurations;
} }
/// return nullable [QuillBaseToolbarConfigurations]. Since the quill /// return nullable [QuillToolbarConfigurations]. Since the quill
/// toolbar configurations is in the [QuillBaseToolbarProvider] /// toolbar configurations is in the [QuillBaseToolbarProvider]
/// then we need to get the /// then we need to get the
/// provider widget first and then we will return toolbar configurations /// provider widget first and then we will return toolbar configurations
/// don't throw exception if [QuillBaseToolbarProvider] is not in the widget tree /// don't throw exception if [QuillBaseToolbarProvider] is not in the widget tree
QuillBaseToolbarConfigurations? get quillBaseToolbarConfigurations { QuillToolbarConfigurations? get quillBaseToolbarConfigurations {
return QuillBaseToolbarProvider.of(this)?.toolbarConfigurations; return QuillBaseToolbarProvider.of(this)?.toolbarConfigurations;
} }

@ -6,13 +6,13 @@ import 'package:flutter/material.dart'
import 'package:flutter/widgets.dart'; import 'package:flutter/widgets.dart';
import 'package:meta/meta.dart' show experimental; import 'package:meta/meta.dart' show experimental;
import '../../../widgets/controller.dart'; import '../../../widgets/others/controller.dart';
import '../../../widgets/default_styles.dart'; import '../../../widgets/others/default_styles.dart';
import '../../../widgets/delegate.dart'; import '../../../widgets/others/delegate.dart';
import '../../../widgets/editor/editor.dart'; import '../../../widgets/editor/editor.dart';
import '../../../widgets/editor/editor_builder.dart'; import '../../../widgets/editor/editor_builder.dart';
import '../../../widgets/embeds.dart'; import '../../../widgets/others/embeds.dart';
import '../../../widgets/link.dart'; import '../../../widgets/others/link.dart';
import '../../../widgets/raw_editor/raw_editor.dart'; import '../../../widgets/raw_editor/raw_editor.dart';
import '../../themes/quill_dialog_theme.dart'; import '../../themes/quill_dialog_theme.dart';
import 'element_options.dart'; import 'element_options.dart';

@ -5,7 +5,7 @@ import '../../../flutter_quill.dart';
export './editor/configurations.dart'; export './editor/configurations.dart';
export 'quill_shared_configurations.dart'; export 'quill_shared_configurations.dart';
export 'toolbar/toolbar_configurations.dart'; export 'toolbar/simple_toolbar_configurations.dart';
@immutable @immutable
class QuillConfigurations extends Equatable { class QuillConfigurations extends Equatable {
@ -22,7 +22,7 @@ class QuillConfigurations extends Equatable {
// final QuillController controller; // final QuillController controller;
/// The shared configurations between [QuillEditorConfigurations] and /// The shared configurations between [QuillEditorConfigurations] and
/// [QuillToolbarConfigurations] so we don't duplicate things /// [QuillSimpleToolbarConfigurations] so we don't duplicate things
final QuillSharedConfigurations sharedConfigurations; final QuillSharedConfigurations sharedConfigurations;
@override @override

@ -3,12 +3,13 @@ import 'package:flutter/material.dart' show Color, Colors, Locale;
import '../themes/quill_dialog_theme.dart'; import '../themes/quill_dialog_theme.dart';
import './editor/configurations.dart' show QuillEditorConfigurations; import './editor/configurations.dart' show QuillEditorConfigurations;
import 'toolbar/toolbar_configurations.dart' show QuillToolbarConfigurations; import 'toolbar/simple_toolbar_configurations.dart'
show QuillSimpleToolbarConfigurations;
export './others/animations.dart'; export './others/animations.dart';
/// The shared configurations between [QuillEditorConfigurations] and /// The shared configurations between [QuillEditorConfigurations] and
/// [QuillToolbarConfigurations] so we don't duplicate things /// [QuillSimpleToolbarConfigurations] so we don't duplicate things
class QuillSharedConfigurations extends Equatable { class QuillSharedConfigurations extends Equatable {
const QuillSharedConfigurations({ const QuillSharedConfigurations({
this.dialogBarrierColor = Colors.black54, this.dialogBarrierColor = Colors.black54,

@ -25,11 +25,11 @@ import 'package:flutter/widgets.dart'
Widget; Widget;
import 'package:meta/meta.dart' show immutable; import 'package:meta/meta.dart' show immutable;
import '../../../widgets/controller.dart'; import '../../../widgets/others/controller.dart';
import '../../../widgets/cursor.dart'; import '../../../widgets/others/cursor.dart';
import '../../../widgets/default_styles.dart'; import '../../../widgets/others/default_styles.dart';
import '../../../widgets/delegate.dart'; import '../../../widgets/others/delegate.dart';
import '../../../widgets/link.dart'; import '../../../widgets/others/link.dart';
import '../../../widgets/raw_editor/raw_editor.dart'; import '../../../widgets/raw_editor/raw_editor.dart';
import '../../../widgets/raw_editor/raw_editor_state.dart'; import '../../../widgets/raw_editor/raw_editor_state.dart';
import '../../themes/quill_dialog_theme.dart'; import '../../themes/quill_dialog_theme.dart';

@ -1,33 +0,0 @@
import 'package:flutter/widgets.dart'
show Axis, WrapAlignment, WrapCrossAlignment, immutable;
import '../../../widgets/toolbar/base_toolbar.dart';
import 'toolbar_shared_configurations.dart';
@immutable
class QuillBaseToolbarConfigurations extends QuillSharedToolbarProperties {
const QuillBaseToolbarConfigurations({
required this.childrenBuilder,
super.axis = Axis.horizontal,
super.toolbarSize = kDefaultIconSize * 2,
super.toolbarSectionSpacing = kToolbarSectionSpacing,
super.toolbarIconAlignment = WrapAlignment.center,
super.toolbarIconCrossAlignment = WrapCrossAlignment.center,
super.color,
super.customButtons = const [],
super.sectionDividerColor,
super.sectionDividerSpace,
super.linkDialogAction,
super.multiRowsDisplay = true,
super.decoration,
/// Note this only used when you using the quill toolbar buttons like
/// `QuillToolbarHistoryButton` inside it
super.buttonOptions = const QuillToolbarButtonOptions(),
});
final QuillBaseToolbarChildrenBuilder childrenBuilder;
@override
List<Object?> get props => [];
}

@ -1,6 +1,6 @@
import 'package:flutter/widgets.dart' show Color; import 'package:flutter/widgets.dart' show Color;
import '../../../../widgets/controller.dart'; import '../../../../widgets/others/controller.dart';
import '../../quill_shared_configurations.dart' show QuillSharedConfigurations; import '../../quill_shared_configurations.dart' show QuillSharedConfigurations;
import 'base.dart'; import 'base.dart';

@ -61,7 +61,7 @@ class QuillToolbarFontFamilyButtonOptions extends QuillToolbarBaseButtonOptions<
final double hoverElevation; final double hoverElevation;
final double highlightElevation; final double highlightElevation;
/// By default it will be [fontFamilyValues] from [QuillToolbarConfigurations] /// By default it will be [fontFamilyValues] from [QuillSimpleToolbarConfigurations]
/// You can override this if you want /// You can override this if you want
final Map<String, String>? rawItemsMap; final Map<String, String>? rawItemsMap;
final ValueChanged<String>? onSelected; final ValueChanged<String>? onSelected;

@ -6,7 +6,7 @@ import 'package:flutter/material.dart'
import 'package:flutter/widgets.dart' import 'package:flutter/widgets.dart'
show Color, EdgeInsets, EdgeInsetsGeometry, TextOverflow, TextStyle; show Color, EdgeInsets, EdgeInsetsGeometry, TextOverflow, TextStyle;
import '../../../../widgets/controller.dart'; import '../../../../widgets/others/controller.dart';
import '../../../documents/attribute.dart'; import '../../../documents/attribute.dart';
import '../../../themes/quill_icon_theme.dart'; import '../../../themes/quill_icon_theme.dart';
import '../../quill_configurations.dart'; import '../../quill_configurations.dart';
@ -58,7 +58,7 @@ class QuillToolbarFontSizeButtonOptions extends QuillToolbarBaseButtonOptions<
final double hoverElevation; final double hoverElevation;
final double highlightElevation; final double highlightElevation;
/// By default it will be [fontSizesValues] from [QuillToolbarConfigurations] /// By default it will be [fontSizesValues] from [QuillSimpleToolbarConfigurations]
/// You can override this if you want /// You can override this if you want
final Map<String, String>? rawItemsMap; final Map<String, String>? rawItemsMap;
final ValueChanged<String>? onSelected; final ValueChanged<String>? onSelected;

@ -37,7 +37,7 @@ class QuillToolbarSelectHeaderStyleButtonsOptions
/// ] /// ]
final List<Attribute>? attributes; final List<Attribute>? attributes;
/// By default we will the toolbar axis from [QuillToolbarConfigurations] /// By default we will the toolbar axis from [QuillSimpleToolbarConfigurations]
final Axis? axis; final Axis? axis;
final double? iconSize; final double? iconSize;
final double? iconButtonFactor; final double? iconButtonFactor;

@ -0,0 +1,317 @@
import 'package:equatable/equatable.dart';
import 'package:flutter/foundation.dart' show immutable;
import 'package:flutter/widgets.dart'
show Axis, Widget, WrapAlignment, WrapCrossAlignment;
import '../../../widgets/others/controller.dart';
import '../../../widgets/others/embeds.dart';
import '../../themes/quill_dialog_theme.dart';
import '../../themes/quill_icon_theme.dart';
import 'buttons/base.dart';
import 'buttons/clear_format.dart';
import 'buttons/color.dart';
import 'buttons/custom_button.dart';
import 'buttons/font_family.dart';
import 'buttons/font_size.dart';
import 'buttons/history.dart';
import 'buttons/indent.dart';
import 'buttons/link_style.dart';
import 'buttons/link_style2.dart';
import 'buttons/search.dart';
import 'buttons/select_alignment.dart';
import 'buttons/select_header_style.dart';
import 'buttons/toggle_check_list.dart';
import 'buttons/toggle_style.dart';
import 'toolbar_shared_configurations.dart';
export './../../../widgets/toolbar/buttons/search/search_dialog.dart';
export './buttons/base.dart';
export './buttons/clear_format.dart';
export './buttons/color.dart';
export './buttons/custom_button.dart';
export './buttons/font_family.dart';
export './buttons/font_size.dart';
export './buttons/history.dart';
export './buttons/indent.dart';
export './buttons/link_style.dart';
export './buttons/link_style2.dart';
export './buttons/search.dart';
export './buttons/select_alignment.dart';
export './buttons/select_header_style.dart';
export './buttons/toggle_check_list.dart';
export './buttons/toggle_style.dart';
/// The default size of the icon of a button.
const double kDefaultIconSize = 18;
/// The default size for the toolbar (width, height)
const double defaultToolbarSize = kDefaultIconSize * 2;
/// The factor of how much larger the button is in relation to the icon.
const double kIconButtonFactor = 1.77;
/// The horizontal margin between the contents of each toolbar section.
const double kToolbarSectionSpacing = 4;
enum LinkStyleType {
/// Defines the original [QuillToolbarLinkStyleButton].
original,
/// Defines the alternative [QuillToolbarLinkStyleButton2].
alternative;
bool get isOriginal => this == LinkStyleType.original;
bool get isAlternative => this == LinkStyleType.alternative;
}
/// The configurations for the toolbar widget of flutter quill
@immutable
class QuillSimpleToolbarConfigurations extends QuillSharedToolbarProperties {
const QuillSimpleToolbarConfigurations({
required this.controller,
super.toolbarSectionSpacing = kToolbarSectionSpacing,
super.toolbarIconAlignment = WrapAlignment.center,
super.toolbarIconCrossAlignment = WrapCrossAlignment.center,
super.buttonOptions = const QuillToolbarButtonOptions(),
super.multiRowsDisplay = true,
this.fontSizesValues,
this.showDividers = true,
this.showFontFamily = true,
this.showFontSize = true,
this.showBoldButton = true,
this.showItalicButton = true,
this.showSmallButton = false,
this.showUnderLineButton = true,
this.showStrikeThrough = true,
this.showInlineCode = true,
this.showColorButton = true,
this.showBackgroundColorButton = true,
this.showClearFormat = true,
this.showAlignmentButtons = false,
this.showLeftAlignment = true,
this.showCenterAlignment = true,
this.showRightAlignment = true,
this.showJustifyAlignment = true,
this.showHeaderStyle = true,
this.showListNumbers = true,
this.showListBullets = true,
this.showListCheck = true,
this.showCodeBlock = true,
this.showQuote = true,
this.showIndent = true,
this.showLink = true,
this.showUndo = true,
this.showRedo = true,
this.showDirection = false,
this.showSearchButton = true,
this.showSubscript = true,
this.showSuperscript = true,
this.linkStyleType = LinkStyleType.original,
super.customButtons = const [],
/// The decoration to use for the toolbar.
super.decoration,
/// Toolbar items to display for controls of embed blocks
this.embedButtons,
super.linkDialogAction,
///The theme to use for the icons in the toolbar, uses type [QuillIconTheme]
// this.iconTheme,
this.dialogTheme,
super.axis = Axis.horizontal,
super.color,
super.sectionDividerColor,
super.sectionDividerSpace,
this.spacerWidget,
/// By default it will calculated based on the [globalIconSize] from
/// [base] in [QuillToolbarButtonOptions]
/// You can change it but the the change only apply if
/// the [multiRowsDisplay] is false, if [multiRowsDisplay] then the value
/// will be [kDefaultIconSize] * 2
super.toolbarSize,
}) : _toolbarSize = toolbarSize;
final double? _toolbarSize;
/// The toolbar size, by default it will be `baseButtonOptions.iconSize * 2`
@override
double get toolbarSize {
final alternativeToolbarSize = _toolbarSize;
if (alternativeToolbarSize != null) {
return alternativeToolbarSize;
}
return buttonOptions.base.globalIconSize * 2;
}
final QuillController controller;
/// 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;
/// By default it will be
/// ```
/// {
/// 'Small'.i18n: 'small',
/// 'Large'.i18n: 'large',
/// 'Huge'.i18n: 'huge',
/// 'Clear'.loc: '0'
/// }
/// ```
final Map<String, String>? fontSizesValues;
final bool showDividers;
final bool showFontFamily;
final bool showFontSize;
final bool showBoldButton;
final bool showItalicButton;
final bool showSmallButton;
final bool showUnderLineButton;
final bool showStrikeThrough;
final bool showInlineCode;
final bool showColorButton;
final bool showBackgroundColorButton;
final bool showClearFormat;
final bool showAlignmentButtons;
final bool showLeftAlignment;
final bool showCenterAlignment;
final bool showRightAlignment;
final bool showJustifyAlignment;
final bool showHeaderStyle;
final bool showListNumbers;
final bool showListBullets;
final bool showListCheck;
final bool showCodeBlock;
final bool showQuote;
final bool showIndent;
final bool showLink;
final bool showUndo;
final bool showRedo;
final bool showDirection;
final bool showSearchButton;
final bool showSubscript;
final bool showSuperscript;
/// Toolbar items to display for controls of embed blocks
final List<EmbedButtonBuilder>? embedButtons;
// ///The theme to use for the icons in the toolbar, uses type [QuillIconTheme]
// final QuillIconTheme? iconTheme;
///The theme to use for the theming of the [LinkDialog()],
///shown when embedding an image, for example
final QuillDialogTheme? dialogTheme;
/// Defines which dialog is used for applying link attribute.
final LinkStyleType linkStyleType;
@override
List<Object?> get props => [
buttonOptions,
multiRowsDisplay,
fontSizesValues,
toolbarSize,
axis,
];
}
/// The configurations for the buttons of the toolbar widget of flutter quill
@immutable
class QuillToolbarButtonOptions extends Equatable {
const QuillToolbarButtonOptions({
this.base = const QuillToolbarBaseButtonOptions(),
this.undoHistory = const QuillToolbarHistoryButtonOptions(
isUndo: true,
),
this.redoHistory = const QuillToolbarHistoryButtonOptions(
isUndo: false,
),
this.fontFamily = const QuillToolbarFontFamilyButtonOptions(),
this.fontSize = const QuillToolbarFontSizeButtonOptions(),
this.bold = const QuillToolbarToggleStyleButtonOptions(),
this.subscript = const QuillToolbarToggleStyleButtonOptions(),
this.superscript = const QuillToolbarToggleStyleButtonOptions(),
this.italic = const QuillToolbarToggleStyleButtonOptions(),
this.small = const QuillToolbarToggleStyleButtonOptions(),
this.underLine = const QuillToolbarToggleStyleButtonOptions(),
this.strikeThrough = const QuillToolbarToggleStyleButtonOptions(),
this.inlineCode = const QuillToolbarToggleStyleButtonOptions(),
this.direction = const QuillToolbarToggleStyleButtonOptions(),
this.listNumbers = const QuillToolbarToggleStyleButtonOptions(),
this.listBullets = const QuillToolbarToggleStyleButtonOptions(),
this.codeBlock = const QuillToolbarToggleStyleButtonOptions(),
this.quote = const QuillToolbarToggleStyleButtonOptions(),
this.toggleCheckList = const QuillToolbarToggleCheckListButtonOptions(),
this.indentIncrease = const QuillToolbarIndentButtonOptions(),
this.indentDecrease = const QuillToolbarIndentButtonOptions(),
this.color = const QuillToolbarColorButtonOptions(),
this.backgroundColor = const QuillToolbarColorButtonOptions(),
this.clearFormat = const QuillToolbarClearFormatButtonOptions(),
this.selectAlignmentButtons =
const QuillToolbarSelectAlignmentButtonOptions(),
this.search = const QuillToolbarSearchButtonOptions(),
this.selectHeaderStyleButtons =
const QuillToolbarSelectHeaderStyleButtonsOptions(),
this.linkStyle = const QuillToolbarLinkStyleButtonOptions(),
this.linkStyle2 = const QuillToolbarLinkStyleButton2Options(),
this.customButtons = const QuillToolbarCustomButtonOptions(),
});
/// The base configurations for all the buttons which will apply to all
/// but if the options overrided in the spesefic button options
/// then it will use that instead
final QuillToolbarBaseButtonOptions base;
final QuillToolbarHistoryButtonOptions undoHistory;
final QuillToolbarHistoryButtonOptions redoHistory;
final QuillToolbarFontFamilyButtonOptions fontFamily;
final QuillToolbarFontSizeButtonOptions fontSize;
final QuillToolbarToggleStyleButtonOptions bold;
final QuillToolbarToggleStyleButtonOptions subscript;
final QuillToolbarToggleStyleButtonOptions superscript;
final QuillToolbarToggleStyleButtonOptions italic;
final QuillToolbarToggleStyleButtonOptions small;
final QuillToolbarToggleStyleButtonOptions underLine;
final QuillToolbarToggleStyleButtonOptions strikeThrough;
final QuillToolbarToggleStyleButtonOptions inlineCode;
final QuillToolbarToggleStyleButtonOptions direction;
final QuillToolbarToggleStyleButtonOptions listNumbers;
final QuillToolbarToggleStyleButtonOptions listBullets;
final QuillToolbarToggleStyleButtonOptions codeBlock;
final QuillToolbarToggleStyleButtonOptions quote;
final QuillToolbarToggleCheckListButtonOptions toggleCheckList;
final QuillToolbarIndentButtonOptions indentIncrease;
final QuillToolbarIndentButtonOptions indentDecrease;
final QuillToolbarColorButtonOptions color;
final QuillToolbarColorButtonOptions backgroundColor;
final QuillToolbarClearFormatButtonOptions clearFormat;
/// The reason we call this buttons in the end because this is responsible
/// for all the alignment buttons and not just one, you still
/// can customize the icons and tooltips
/// and you have child builder
final QuillToolbarSelectAlignmentButtonOptions selectAlignmentButtons;
final QuillToolbarSearchButtonOptions search;
/// The reason we call this buttons in the end because this is responsible
/// for all the header style buttons and not just one, you still
/// can customize it and you also have child builder
final QuillToolbarSelectHeaderStyleButtonsOptions selectHeaderStyleButtons;
final QuillToolbarLinkStyleButtonOptions linkStyle;
final QuillToolbarLinkStyleButton2Options linkStyle2;
final QuillToolbarCustomButtonOptions customButtons;
@override
List<Object?> get props => [
base,
];
}

@ -1,317 +1,33 @@
import 'package:equatable/equatable.dart';
import 'package:flutter/foundation.dart' show immutable;
import 'package:flutter/widgets.dart' import 'package:flutter/widgets.dart'
show Axis, Widget, WrapAlignment, WrapCrossAlignment; show Axis, WrapAlignment, WrapCrossAlignment, immutable;
import '../../../widgets/controller.dart'; import '../../../widgets/toolbar/base_toolbar.dart';
import '../../../widgets/embeds.dart';
import '../../themes/quill_dialog_theme.dart';
import '../../themes/quill_icon_theme.dart';
import 'buttons/base.dart';
import 'buttons/clear_format.dart';
import 'buttons/color.dart';
import 'buttons/custom_button.dart';
import 'buttons/font_family.dart';
import 'buttons/font_size.dart';
import 'buttons/history.dart';
import 'buttons/indent.dart';
import 'buttons/link_style.dart';
import 'buttons/link_style2.dart';
import 'buttons/search.dart';
import 'buttons/select_alignment.dart';
import 'buttons/select_header_style.dart';
import 'buttons/toggle_check_list.dart';
import 'buttons/toggle_style.dart';
import 'toolbar_shared_configurations.dart'; import 'toolbar_shared_configurations.dart';
export './../../../widgets/toolbar/buttons/search/search_dialog.dart';
export './buttons/base.dart';
export './buttons/clear_format.dart';
export './buttons/color.dart';
export './buttons/custom_button.dart';
export './buttons/font_family.dart';
export './buttons/font_size.dart';
export './buttons/history.dart';
export './buttons/indent.dart';
export './buttons/link_style.dart';
export './buttons/link_style2.dart';
export './buttons/search.dart';
export './buttons/select_alignment.dart';
export './buttons/select_header_style.dart';
export './buttons/toggle_check_list.dart';
export './buttons/toggle_style.dart';
/// The default size of the icon of a button.
const double kDefaultIconSize = 18;
/// The default size for the toolbar (width, height)
const double defaultToolbarSize = kDefaultIconSize * 2;
/// The factor of how much larger the button is in relation to the icon.
const double kIconButtonFactor = 1.77;
/// The horizontal margin between the contents of each toolbar section.
const double kToolbarSectionSpacing = 4;
enum LinkStyleType {
/// Defines the original [QuillToolbarLinkStyleButton].
original,
/// Defines the alternative [QuillToolbarLinkStyleButton2].
alternative;
bool get isOriginal => this == LinkStyleType.original;
bool get isAlternative => this == LinkStyleType.alternative;
}
/// The configurations for the toolbar widget of flutter quill
@immutable @immutable
class QuillToolbarConfigurations extends QuillSharedToolbarProperties { class QuillToolbarConfigurations extends QuillSharedToolbarProperties {
const QuillToolbarConfigurations({ const QuillToolbarConfigurations({
required this.controller, required this.childrenBuilder,
super.axis = Axis.horizontal,
super.toolbarSize = kDefaultIconSize * 2,
super.toolbarSectionSpacing = kToolbarSectionSpacing, super.toolbarSectionSpacing = kToolbarSectionSpacing,
super.toolbarIconAlignment = WrapAlignment.center, super.toolbarIconAlignment = WrapAlignment.center,
super.toolbarIconCrossAlignment = WrapCrossAlignment.center, super.toolbarIconCrossAlignment = WrapCrossAlignment.center,
super.buttonOptions = const QuillToolbarButtonOptions(),
super.multiRowsDisplay = true,
this.fontSizesValues,
this.showDividers = true,
this.showFontFamily = true,
this.showFontSize = true,
this.showBoldButton = true,
this.showItalicButton = true,
this.showSmallButton = false,
this.showUnderLineButton = true,
this.showStrikeThrough = true,
this.showInlineCode = true,
this.showColorButton = true,
this.showBackgroundColorButton = true,
this.showClearFormat = true,
this.showAlignmentButtons = false,
this.showLeftAlignment = true,
this.showCenterAlignment = true,
this.showRightAlignment = true,
this.showJustifyAlignment = true,
this.showHeaderStyle = true,
this.showListNumbers = true,
this.showListBullets = true,
this.showListCheck = true,
this.showCodeBlock = true,
this.showQuote = true,
this.showIndent = true,
this.showLink = true,
this.showUndo = true,
this.showRedo = true,
this.showDirection = false,
this.showSearchButton = true,
this.showSubscript = true,
this.showSuperscript = true,
this.linkStyleType = LinkStyleType.original,
super.customButtons = const [],
/// The decoration to use for the toolbar.
super.decoration,
/// Toolbar items to display for controls of embed blocks
this.embedButtons,
super.linkDialogAction,
///The theme to use for the icons in the toolbar, uses type [QuillIconTheme]
// this.iconTheme,
this.dialogTheme,
super.axis = Axis.horizontal,
super.color, super.color,
super.customButtons = const [],
super.sectionDividerColor, super.sectionDividerColor,
super.sectionDividerSpace, super.sectionDividerSpace,
this.spacerWidget, super.linkDialogAction,
super.multiRowsDisplay = true,
/// By default it will calculated based on the [globalIconSize] from super.decoration,
/// [base] in [QuillToolbarButtonOptions]
/// You can change it but the the change only apply if
/// the [multiRowsDisplay] is false, if [multiRowsDisplay] then the value
/// will be [kDefaultIconSize] * 2
super.toolbarSize,
}) : _toolbarSize = toolbarSize;
final double? _toolbarSize;
/// The toolbar size, by default it will be `baseButtonOptions.iconSize * 2`
@override
double get toolbarSize {
final alternativeToolbarSize = _toolbarSize;
if (alternativeToolbarSize != null) {
return alternativeToolbarSize;
}
return buttonOptions.base.globalIconSize * 2;
}
final QuillController controller;
/// 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;
/// By default it will be
/// ```
/// {
/// 'Small'.i18n: 'small',
/// 'Large'.i18n: 'large',
/// 'Huge'.i18n: 'huge',
/// 'Clear'.loc: '0'
/// }
/// ```
final Map<String, String>? fontSizesValues;
final bool showDividers;
final bool showFontFamily;
final bool showFontSize;
final bool showBoldButton;
final bool showItalicButton;
final bool showSmallButton;
final bool showUnderLineButton;
final bool showStrikeThrough;
final bool showInlineCode;
final bool showColorButton;
final bool showBackgroundColorButton;
final bool showClearFormat;
final bool showAlignmentButtons;
final bool showLeftAlignment;
final bool showCenterAlignment;
final bool showRightAlignment;
final bool showJustifyAlignment;
final bool showHeaderStyle;
final bool showListNumbers;
final bool showListBullets;
final bool showListCheck;
final bool showCodeBlock;
final bool showQuote;
final bool showIndent;
final bool showLink;
final bool showUndo;
final bool showRedo;
final bool showDirection;
final bool showSearchButton;
final bool showSubscript;
final bool showSuperscript;
/// Toolbar items to display for controls of embed blocks
final List<EmbedButtonBuilder>? embedButtons;
// ///The theme to use for the icons in the toolbar, uses type [QuillIconTheme]
// final QuillIconTheme? iconTheme;
///The theme to use for the theming of the [LinkDialog()],
///shown when embedding an image, for example
final QuillDialogTheme? dialogTheme;
/// Defines which dialog is used for applying link attribute.
final LinkStyleType linkStyleType;
@override
List<Object?> get props => [
buttonOptions,
multiRowsDisplay,
fontSizesValues,
toolbarSize,
axis,
];
}
/// The configurations for the buttons of the toolbar widget of flutter quill /// Note this only used when you using the quill toolbar buttons like
@immutable /// `QuillToolbarHistoryButton` inside it
class QuillToolbarButtonOptions extends Equatable { super.buttonOptions = const QuillToolbarButtonOptions(),
const QuillToolbarButtonOptions({
this.base = const QuillToolbarBaseButtonOptions(),
this.undoHistory = const QuillToolbarHistoryButtonOptions(
isUndo: true,
),
this.redoHistory = const QuillToolbarHistoryButtonOptions(
isUndo: false,
),
this.fontFamily = const QuillToolbarFontFamilyButtonOptions(),
this.fontSize = const QuillToolbarFontSizeButtonOptions(),
this.bold = const QuillToolbarToggleStyleButtonOptions(),
this.subscript = const QuillToolbarToggleStyleButtonOptions(),
this.superscript = const QuillToolbarToggleStyleButtonOptions(),
this.italic = const QuillToolbarToggleStyleButtonOptions(),
this.small = const QuillToolbarToggleStyleButtonOptions(),
this.underLine = const QuillToolbarToggleStyleButtonOptions(),
this.strikeThrough = const QuillToolbarToggleStyleButtonOptions(),
this.inlineCode = const QuillToolbarToggleStyleButtonOptions(),
this.direction = const QuillToolbarToggleStyleButtonOptions(),
this.listNumbers = const QuillToolbarToggleStyleButtonOptions(),
this.listBullets = const QuillToolbarToggleStyleButtonOptions(),
this.codeBlock = const QuillToolbarToggleStyleButtonOptions(),
this.quote = const QuillToolbarToggleStyleButtonOptions(),
this.toggleCheckList = const QuillToolbarToggleCheckListButtonOptions(),
this.indentIncrease = const QuillToolbarIndentButtonOptions(),
this.indentDecrease = const QuillToolbarIndentButtonOptions(),
this.color = const QuillToolbarColorButtonOptions(),
this.backgroundColor = const QuillToolbarColorButtonOptions(),
this.clearFormat = const QuillToolbarClearFormatButtonOptions(),
this.selectAlignmentButtons =
const QuillToolbarSelectAlignmentButtonOptions(),
this.search = const QuillToolbarSearchButtonOptions(),
this.selectHeaderStyleButtons =
const QuillToolbarSelectHeaderStyleButtonsOptions(),
this.linkStyle = const QuillToolbarLinkStyleButtonOptions(),
this.linkStyle2 = const QuillToolbarLinkStyleButton2Options(),
this.customButtons = const QuillToolbarCustomButtonOptions(),
}); });
/// The base configurations for all the buttons which will apply to all final QuillBaseToolbarChildrenBuilder childrenBuilder;
/// but if the options overrided in the spesefic button options
/// then it will use that instead
final QuillToolbarBaseButtonOptions base;
final QuillToolbarHistoryButtonOptions undoHistory;
final QuillToolbarHistoryButtonOptions redoHistory;
final QuillToolbarFontFamilyButtonOptions fontFamily;
final QuillToolbarFontSizeButtonOptions fontSize;
final QuillToolbarToggleStyleButtonOptions bold;
final QuillToolbarToggleStyleButtonOptions subscript;
final QuillToolbarToggleStyleButtonOptions superscript;
final QuillToolbarToggleStyleButtonOptions italic;
final QuillToolbarToggleStyleButtonOptions small;
final QuillToolbarToggleStyleButtonOptions underLine;
final QuillToolbarToggleStyleButtonOptions strikeThrough;
final QuillToolbarToggleStyleButtonOptions inlineCode;
final QuillToolbarToggleStyleButtonOptions direction;
final QuillToolbarToggleStyleButtonOptions listNumbers;
final QuillToolbarToggleStyleButtonOptions listBullets;
final QuillToolbarToggleStyleButtonOptions codeBlock;
final QuillToolbarToggleStyleButtonOptions quote;
final QuillToolbarToggleCheckListButtonOptions toggleCheckList;
final QuillToolbarIndentButtonOptions indentIncrease;
final QuillToolbarIndentButtonOptions indentDecrease;
final QuillToolbarColorButtonOptions color;
final QuillToolbarColorButtonOptions backgroundColor;
final QuillToolbarClearFormatButtonOptions clearFormat;
/// The reason we call this buttons in the end because this is responsible
/// for all the alignment buttons and not just one, you still
/// can customize the icons and tooltips
/// and you have child builder
final QuillToolbarSelectAlignmentButtonOptions selectAlignmentButtons;
final QuillToolbarSearchButtonOptions search;
/// The reason we call this buttons in the end because this is responsible
/// for all the header style buttons and not just one, you still
/// can customize it and you also have child builder
final QuillToolbarSelectHeaderStyleButtonsOptions selectHeaderStyleButtons;
final QuillToolbarLinkStyleButtonOptions linkStyle;
final QuillToolbarLinkStyleButton2Options linkStyle2;
final QuillToolbarCustomButtonOptions customButtons;
@override @override
List<Object?> get props => [ List<Object?> get props => [];
base,
];
} }

@ -1,6 +1,6 @@
import 'dart:async'; import 'dart:async';
import '../../widgets/embeds.dart'; import '../../widgets/others/embeds.dart';
import '../quill_delta.dart'; import '../quill_delta.dart';
import '../rules/rule.dart'; import '../rules/rule.dart';
import '../structs/doc_change.dart'; import '../structs/doc_change.dart';

@ -1,6 +1,6 @@
import 'dart:collection'; import 'dart:collection';
import '../../../widgets/embeds.dart'; import '../../../widgets/others/embeds.dart';
import '../style.dart'; import '../style.dart';
import 'leaf.dart'; import 'leaf.dart';
import 'line.dart'; import 'line.dart';

@ -1,6 +1,6 @@
import 'dart:math' as math; import 'dart:math' as math;
import '../../../widgets/embeds.dart'; import '../../../widgets/others/embeds.dart';
import '../../quill_delta.dart'; import '../../quill_delta.dart';
import '../style.dart'; import '../style.dart';
import 'embeddable.dart'; import 'embeddable.dart';

@ -2,7 +2,7 @@ import 'dart:math' as math;
import 'package:collection/collection.dart'; import 'package:collection/collection.dart';
import '../../../widgets/embeds.dart'; import '../../../widgets/others/embeds.dart';
import '../../quill_delta.dart'; import '../../quill_delta.dart';
import '../../structs/offset_value.dart'; import '../../structs/offset_value.dart';
import '../attribute.dart'; import '../attribute.dart';

@ -1,6 +1,6 @@
import 'dart:collection'; import 'dart:collection';
import '../../../widgets/embeds.dart'; import '../../../widgets/others/embeds.dart';
import '../../quill_delta.dart'; import '../../quill_delta.dart';
import '../attribute.dart'; import '../attribute.dart';
import '../style.dart'; import '../style.dart';

@ -2,7 +2,7 @@ import 'dart:math';
import '../models/documents/nodes/leaf.dart'; import '../models/documents/nodes/leaf.dart';
import '../models/structs/offset_value.dart'; import '../models/structs/offset_value.dart';
import '../widgets/controller.dart'; import '../widgets/others/controller.dart';
OffsetValue<Embed> getEmbedNode(QuillController controller, int offset) { OffsetValue<Embed> getEmbedNode(QuillController controller, int offset) {
var offset = controller.selection.start; var offset = controller.selection.start;

@ -16,13 +16,13 @@ import '../../models/documents/nodes/container.dart' as container_node;
import '../../models/documents/nodes/leaf.dart'; import '../../models/documents/nodes/leaf.dart';
import '../../models/structs/offset_value.dart'; import '../../models/structs/offset_value.dart';
import '../../utils/platform.dart'; import '../../utils/platform.dart';
import '../box.dart'; import '../others/box.dart';
import '../cursor.dart'; import '../others/cursor.dart';
import '../delegate.dart'; import '../others/delegate.dart';
import '../embeds.dart'; import '../others/embeds.dart';
import '../float_cursor.dart'; import '../others/float_cursor.dart';
import '../raw_editor/raw_editor.dart'; import '../raw_editor/raw_editor.dart';
import '../text_selection.dart'; import '../others/text_selection.dart';
import '../utils/provider.dart'; import '../utils/provider.dart';
import 'editor_builder.dart'; import 'editor_builder.dart';

@ -1,6 +1,6 @@
import 'package:flutter/rendering.dart'; import 'package:flutter/rendering.dart';
import '../models/documents/nodes/container.dart'; import '../../models/documents/nodes/container.dart';
/// A common interface to render boxes which represent a piece of rich text /// A common interface to render boxes which represent a piece of rich text
/// content. /// content.

@ -3,16 +3,16 @@ import 'dart:math' as math;
import 'package:flutter/cupertino.dart'; import 'package:flutter/cupertino.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import '../models/documents/attribute.dart'; import '../../models/documents/attribute.dart';
import '../models/documents/document.dart'; import '../../models/documents/document.dart';
import '../models/documents/nodes/embeddable.dart'; import '../../models/documents/nodes/embeddable.dart';
import '../models/documents/nodes/leaf.dart'; import '../../models/documents/nodes/leaf.dart';
import '../models/documents/style.dart'; import '../../models/documents/style.dart';
import '../models/quill_delta.dart'; import '../../models/quill_delta.dart';
import '../models/structs/doc_change.dart'; import '../../models/structs/doc_change.dart';
import '../models/structs/image_url.dart'; import '../../models/structs/image_url.dart';
import '../models/structs/offset_value.dart'; import '../../models/structs/offset_value.dart';
import '../utils/delta.dart'; import '../../utils/delta.dart';
typedef ReplaceTextCallback = bool Function(int index, int len, Object? data); typedef ReplaceTextCallback = bool Function(int index, int len, Object? data);
typedef DeleteCallback = void Function(int cursorPosition, bool forward); typedef DeleteCallback = void Function(int cursorPosition, bool forward);

@ -2,7 +2,7 @@ import 'dart:async';
import 'package:flutter/widgets.dart'; import 'package:flutter/widgets.dart';
import '../utils/platform.dart'; import '../../utils/platform.dart';
import 'box.dart'; import 'box.dart';
/// Style properties of editing cursor. /// Style properties of editing cursor.

@ -2,11 +2,11 @@ import 'dart:ui';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import '../models/documents/attribute.dart'; import '../../models/documents/attribute.dart';
import '../models/documents/style.dart'; import '../../models/documents/style.dart';
import '../models/structs/vertical_spacing.dart'; import '../../models/structs/vertical_spacing.dart';
import '../utils/platform.dart'; import '../../utils/platform.dart';
import 'style_widgets/checkbox_point.dart'; import '../style_widgets/checkbox_point.dart';
class QuillStyles extends InheritedWidget { class QuillStyles extends InheritedWidget {
const QuillStyles({ const QuillStyles({

@ -3,10 +3,10 @@ import 'package:flutter/gestures.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/scheduler.dart'; import 'package:flutter/scheduler.dart';
import '../models/documents/attribute.dart'; import '../../models/documents/attribute.dart';
import '../models/documents/nodes/leaf.dart'; import '../../models/documents/nodes/leaf.dart';
import '../utils/platform.dart'; import '../../utils/platform.dart';
import 'editor/editor.dart'; import '../editor/editor.dart';
import 'embeds.dart'; import 'embeds.dart';
import 'text_selection.dart'; import 'text_selection.dart';

@ -1,9 +1,9 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import '../../extensions.dart'; import '../../../extensions.dart';
import '../models/documents/nodes/leaf.dart' as leaf; import '../../models/documents/nodes/leaf.dart' as leaf;
import '../models/themes/quill_dialog_theme.dart'; import '../../models/themes/quill_dialog_theme.dart';
import '../models/themes/quill_icon_theme.dart'; import '../../models/themes/quill_icon_theme.dart';
import 'controller.dart'; import 'controller.dart';
abstract class EmbedBuilder { abstract class EmbedBuilder {

@ -2,9 +2,9 @@ import 'package:flutter/cupertino.dart';
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import '../l10n/extensions/localizations.dart'; import '../../l10n/extensions/localizations.dart';
import '../models/documents/attribute.dart'; import '../../models/documents/attribute.dart';
import '../models/documents/nodes/node.dart'; import '../../models/documents/nodes/node.dart';
const linkPrefixes = [ const linkPrefixes = [
'mailto:', // email 'mailto:', // email

@ -1,22 +1,22 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart'; import 'package:flutter/rendering.dart';
import '../extensions/quill_provider.dart'; import '../../extensions/quill_provider.dart';
import '../models/documents/attribute.dart'; import '../../models/documents/attribute.dart';
import '../models/documents/nodes/block.dart'; import '../../models/documents/nodes/block.dart';
import '../models/documents/nodes/line.dart'; import '../../models/documents/nodes/line.dart';
import '../models/structs/vertical_spacing.dart'; import '../../models/structs/vertical_spacing.dart';
import '../utils/delta.dart'; import '../../utils/delta.dart';
import 'box.dart'; import 'box.dart';
import 'controller.dart'; import 'controller.dart';
import 'cursor.dart'; import 'cursor.dart';
import 'default_styles.dart'; import 'default_styles.dart';
import 'delegate.dart'; import 'delegate.dart';
import 'editor/editor.dart'; import '../editor/editor.dart';
import 'link.dart'; import 'link.dart';
import 'style_widgets/bullet_point.dart'; import '../style_widgets/bullet_point.dart';
import 'style_widgets/checkbox_point.dart'; import '../style_widgets/checkbox_point.dart';
import 'style_widgets/number_point.dart'; import '../style_widgets/number_point.dart';
import 'text_line.dart'; import 'text_line.dart';
import 'text_selection.dart'; import 'text_selection.dart';

@ -8,18 +8,18 @@ import 'package:flutter/rendering.dart';
import 'package:flutter/services.dart'; import 'package:flutter/services.dart';
import 'package:url_launcher/url_launcher.dart'; import 'package:url_launcher/url_launcher.dart';
import '../models/documents/attribute.dart'; import '../../models/documents/attribute.dart';
import '../models/documents/nodes/container.dart' as container_node; import '../../models/documents/nodes/container.dart' as container_node;
import '../models/documents/nodes/embeddable.dart'; import '../../models/documents/nodes/embeddable.dart';
import '../models/documents/nodes/leaf.dart'; import '../../models/documents/nodes/leaf.dart';
import '../models/documents/nodes/leaf.dart' as leaf; import '../../models/documents/nodes/leaf.dart' as leaf;
import '../models/documents/nodes/line.dart'; import '../../models/documents/nodes/line.dart';
import '../models/documents/nodes/node.dart'; import '../../models/documents/nodes/node.dart';
import '../models/documents/style.dart'; import '../../models/documents/style.dart';
import '../models/structs/vertical_spacing.dart'; import '../../models/structs/vertical_spacing.dart';
import '../utils/color.dart'; import '../../utils/color.dart';
import '../utils/font.dart'; import '../../utils/font.dart';
import '../utils/platform.dart'; import '../../utils/platform.dart';
import 'box.dart'; import 'box.dart';
import 'controller.dart'; import 'controller.dart';
import 'cursor.dart'; import 'cursor.dart';

@ -6,8 +6,8 @@ import 'package:flutter/gestures.dart';
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:flutter/scheduler.dart'; import 'package:flutter/scheduler.dart';
import '../models/documents/nodes/node.dart'; import '../../models/documents/nodes/node.dart';
import 'editor/editor.dart'; import '../editor/editor.dart';
TextSelection localSelection(Node node, TextSelection selection, fromParent) { TextSelection localSelection(Node node, TextSelection selection, fromParent) {
final base = fromParent ? node.offset : node.documentOffset; final base = fromParent ? node.offset : node.documentOffset;

@ -2,7 +2,7 @@ import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart' show ViewportOffset; import 'package:flutter/rendering.dart' show ViewportOffset;
import '../../models/documents/document.dart'; import '../../models/documents/document.dart';
import '../cursor.dart'; import '../others/cursor.dart';
import '../editor/editor.dart'; import '../editor/editor.dart';
class QuilRawEditorMultiChildRenderObject extends MultiChildRenderObjectWidget { class QuilRawEditorMultiChildRenderObject extends MultiChildRenderObjectWidget {

@ -33,17 +33,17 @@ import '../../utils/cast.dart';
import '../../utils/delta.dart'; import '../../utils/delta.dart';
import '../../utils/embeds.dart'; import '../../utils/embeds.dart';
import '../../utils/platform.dart'; import '../../utils/platform.dart';
import '../controller.dart'; import '../others/controller.dart';
import '../cursor.dart'; import '../others/cursor.dart';
import '../default_styles.dart'; import '../others/default_styles.dart';
import '../editor/editor.dart'; import '../editor/editor.dart';
import '../keyboard_listener.dart'; import '../others/keyboard_listener.dart';
import '../link.dart'; import '../others/link.dart';
import '../proxy.dart'; import '../others/proxy.dart';
import '../quill_single_child_scroll_view.dart'; import 'quill_single_child_scroll_view.dart';
import '../text_block.dart'; import '../others/text_block.dart';
import '../text_line.dart'; import '../others/text_line.dart';
import '../text_selection.dart'; import '../others/text_selection.dart';
import 'raw_editor.dart'; import 'raw_editor.dart';
import 'raw_editor_actions.dart'; import 'raw_editor_actions.dart';
import 'raw_editor_render_object.dart'; import 'raw_editor_render_object.dart';

@ -1,7 +1,7 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import '../../models/documents/attribute.dart'; import '../../models/documents/attribute.dart';
import '../text_block.dart'; import '../others/text_block.dart';
class QuillEditorNumberPoint extends StatelessWidget { class QuillEditorNumberPoint extends StatelessWidget {
const QuillEditorNumberPoint({ const QuillEditorNumberPoint({

@ -3,11 +3,11 @@ import 'package:flutter/material.dart';
import '../../../flutter_quill.dart' import '../../../flutter_quill.dart'
show QuillBaseToolbarProvider, defaultToolbarSize; show QuillBaseToolbarProvider, defaultToolbarSize;
import '../../l10n/widgets/localizations.dart'; import '../../l10n/widgets/localizations.dart';
import '../../models/config/toolbar/base_toolbar_configurations.dart'; import '../../models/config/toolbar/toolbar_configurations.dart';
import 'buttons/arrow_indicated_list_button.dart'; import 'buttons/arrow_indicated_list_button.dart';
export '../../models/config/toolbar/buttons/base.dart'; export '../../models/config/toolbar/buttons/base.dart';
export '../../models/config/toolbar/toolbar_configurations.dart'; export '../../models/config/toolbar/simple_toolbar_configurations.dart';
export 'buttons/clear_format_button.dart'; export 'buttons/clear_format_button.dart';
export 'buttons/color/color_button.dart'; export 'buttons/color/color_button.dart';
export 'buttons/custom_button_button.dart'; export 'buttons/custom_button_button.dart';
@ -28,13 +28,13 @@ typedef QuillBaseToolbarChildrenBuilder = List<Widget> Function(
BuildContext context, BuildContext context,
); );
class QuillBaseToolbar extends StatelessWidget implements PreferredSizeWidget { class QuillToolbar extends StatelessWidget implements PreferredSizeWidget {
const QuillBaseToolbar({ const QuillToolbar({
required this.configurations, required this.configurations,
super.key, super.key,
}); });
final QuillBaseToolbarConfigurations configurations; final QuillToolbarConfigurations configurations;
// We can't get the modified [toolbarSize] by the developer // We can't get the modified [toolbarSize] by the developer
// but we tested the [QuillToolbar] on the [appBar] and I didn't notice // but we tested the [QuillToolbar] on the [appBar] and I didn't notice
@ -90,7 +90,7 @@ class QuillBaseToolbar extends StatelessWidget implements PreferredSizeWidget {
/// The divider which is used for separation of buttons in the toolbar. /// The divider which is used for separation of buttons in the toolbar.
/// ///
/// It can be used outside of this package, for example when user does not use /// It can be used outside of this package, for example when user does not use
/// [QuillBaseToolbar.basic] and compose toolbar's children on its own. /// [QuillToolbar.basic] and compose toolbar's children on its own.
class QuillToolbarDivider extends StatelessWidget { class QuillToolbarDivider extends StatelessWidget {
const QuillToolbarDivider( const QuillToolbarDivider(
this.axis, { this.axis, {

@ -4,7 +4,7 @@ import '../../../extensions/quill_provider.dart';
import '../../../l10n/extensions/localizations.dart'; import '../../../l10n/extensions/localizations.dart';
import '../../../models/documents/attribute.dart'; import '../../../models/documents/attribute.dart';
import '../../../models/themes/quill_icon_theme.dart'; import '../../../models/themes/quill_icon_theme.dart';
import '../../controller.dart'; import '../../others/controller.dart';
import '../base_toolbar.dart'; import '../base_toolbar.dart';
class QuillToolbarClearFormatButton extends StatelessWidget { class QuillToolbarClearFormatButton extends StatelessWidget {

@ -7,7 +7,7 @@ import '../../../../models/documents/attribute.dart';
import '../../../../models/documents/style.dart'; import '../../../../models/documents/style.dart';
import '../../../../models/themes/quill_icon_theme.dart'; import '../../../../models/themes/quill_icon_theme.dart';
import '../../../../utils/color.dart'; import '../../../../utils/color.dart';
import '../../../controller.dart'; import '../../../others/controller.dart';
import '../../base_toolbar.dart'; import '../../base_toolbar.dart';
import 'color_dialog.dart'; import 'color_dialog.dart';

@ -2,7 +2,7 @@ import 'package:flutter/material.dart';
import '../../../extensions/quill_provider.dart'; import '../../../extensions/quill_provider.dart';
import '../../../models/themes/quill_icon_theme.dart'; import '../../../models/themes/quill_icon_theme.dart';
import '../../controller.dart'; import '../../others/controller.dart';
import '../base_toolbar.dart'; import '../base_toolbar.dart';
class QuillToolbarCustomButton extends StatelessWidget { class QuillToolbarCustomButton extends StatelessWidget {

@ -7,7 +7,7 @@ import '../../../models/config/toolbar/buttons/font_family.dart';
import '../../../models/documents/attribute.dart'; import '../../../models/documents/attribute.dart';
import '../../../models/documents/style.dart'; import '../../../models/documents/style.dart';
import '../../../models/themes/quill_icon_theme.dart'; import '../../../models/themes/quill_icon_theme.dart';
import '../../controller.dart'; import '../../others/controller.dart';
class QuillToolbarFontFamilyButton extends StatefulWidget { class QuillToolbarFontFamilyButton extends StatefulWidget {
QuillToolbarFontFamilyButton({ QuillToolbarFontFamilyButton({

@ -8,7 +8,7 @@ import '../../../models/documents/attribute.dart';
import '../../../models/documents/style.dart'; import '../../../models/documents/style.dart';
import '../../../models/themes/quill_icon_theme.dart'; import '../../../models/themes/quill_icon_theme.dart';
import '../../../utils/font.dart'; import '../../../utils/font.dart';
import '../../controller.dart'; import '../../others/controller.dart';
class QuillToolbarFontSizeButton extends StatefulWidget { class QuillToolbarFontSizeButton extends StatefulWidget {
QuillToolbarFontSizeButton({ QuillToolbarFontSizeButton({

@ -2,7 +2,7 @@ import 'package:flutter/material.dart';
import '../../../extensions/quill_provider.dart'; import '../../../extensions/quill_provider.dart';
import '../../../l10n/extensions/localizations.dart'; import '../../../l10n/extensions/localizations.dart';
import '../../controller.dart'; import '../../others/controller.dart';
import '../base_toolbar.dart'; import '../base_toolbar.dart';
class QuillToolbarHistoryButton extends StatefulWidget { class QuillToolbarHistoryButton extends StatefulWidget {

@ -4,7 +4,7 @@ import '../../../extensions/quill_provider.dart';
import '../../../l10n/extensions/localizations.dart'; import '../../../l10n/extensions/localizations.dart';
import '../../../models/config/toolbar/buttons/indent.dart'; import '../../../models/config/toolbar/buttons/indent.dart';
import '../../../models/themes/quill_icon_theme.dart'; import '../../../models/themes/quill_icon_theme.dart';
import '../../controller.dart'; import '../../others/controller.dart';
import '../base_toolbar.dart' import '../base_toolbar.dart'
show QuillToolbarBaseButtonOptions, QuillToolbarIconButton; show QuillToolbarBaseButtonOptions, QuillToolbarIconButton;

@ -10,8 +10,8 @@ import '../../../l10n/widgets/localizations.dart';
import '../../../models/documents/attribute.dart'; import '../../../models/documents/attribute.dart';
import '../../../models/themes/quill_dialog_theme.dart'; import '../../../models/themes/quill_dialog_theme.dart';
import '../../../models/themes/quill_icon_theme.dart'; import '../../../models/themes/quill_icon_theme.dart';
import '../../controller.dart'; import '../../others/controller.dart';
import '../../link.dart'; import '../../others/link.dart';
import '../base_toolbar.dart'; import '../base_toolbar.dart';
/// Alternative version of [QuillToolbarLinkStyleButton]. This widget has more /// Alternative version of [QuillToolbarLinkStyleButton]. This widget has more

@ -8,8 +8,8 @@ import '../../../models/rules/insert.dart';
import '../../../models/structs/link_dialog_action.dart'; import '../../../models/structs/link_dialog_action.dart';
import '../../../models/themes/quill_dialog_theme.dart'; import '../../../models/themes/quill_dialog_theme.dart';
import '../../../models/themes/quill_icon_theme.dart'; import '../../../models/themes/quill_icon_theme.dart';
import '../../controller.dart'; import '../../others/controller.dart';
import '../../link.dart'; import '../../others/link.dart';
import '../base_toolbar.dart'; import '../base_toolbar.dart';
class QuillToolbarLinkStyleButton extends StatefulWidget { class QuillToolbarLinkStyleButton extends StatefulWidget {

@ -5,7 +5,7 @@ import '../../../../l10n/extensions/localizations.dart';
import '../../../../l10n/widgets/localizations.dart'; import '../../../../l10n/widgets/localizations.dart';
import '../../../../models/themes/quill_dialog_theme.dart'; import '../../../../models/themes/quill_dialog_theme.dart';
import '../../../../models/themes/quill_icon_theme.dart'; import '../../../../models/themes/quill_icon_theme.dart';
import '../../../controller.dart'; import '../../../others/controller.dart';
import '../../base_toolbar.dart'; import '../../base_toolbar.dart';
class QuillToolbarSearchButton extends StatelessWidget { class QuillToolbarSearchButton extends StatelessWidget {

@ -3,7 +3,7 @@ import 'package:flutter/material.dart';
import '../../../../l10n/extensions/localizations.dart'; import '../../../../l10n/extensions/localizations.dart';
import '../../../../models/documents/document.dart'; import '../../../../models/documents/document.dart';
import '../../../../models/themes/quill_dialog_theme.dart'; import '../../../../models/themes/quill_dialog_theme.dart';
import '../../../controller.dart'; import '../../../others/controller.dart';
@immutable @immutable
class QuillToolbarSearchDialogChildBuilderExtraOptions { class QuillToolbarSearchDialogChildBuilderExtraOptions {

@ -7,7 +7,7 @@ import '../../../models/documents/attribute.dart';
import '../../../models/documents/style.dart'; import '../../../models/documents/style.dart';
import '../../../models/themes/quill_icon_theme.dart'; import '../../../models/themes/quill_icon_theme.dart';
import '../../../utils/widgets.dart'; import '../../../utils/widgets.dart';
import '../../controller.dart'; import '../../others/controller.dart';
import '../base_toolbar.dart'; import '../base_toolbar.dart';
class QuillToolbarSelectAlignmentButton extends StatefulWidget { class QuillToolbarSelectAlignmentButton extends StatefulWidget {

@ -3,7 +3,7 @@ import 'package:flutter/material.dart';
import '../../../../translations.dart'; import '../../../../translations.dart';
import '../../../models/config/toolbar/buttons/select_header_style.dart'; import '../../../models/config/toolbar/buttons/select_header_style.dart';
import '../../../models/documents/attribute.dart'; import '../../../models/documents/attribute.dart';
import '../../controller.dart'; import '../../others/controller.dart';
enum QuillToolbarSelectHeaderStyleButtonOptions { enum QuillToolbarSelectHeaderStyleButtonOptions {
normal, normal,

@ -7,7 +7,7 @@ import '../../../l10n/extensions/localizations.dart';
import '../../../models/documents/attribute.dart'; import '../../../models/documents/attribute.dart';
import '../../../models/documents/style.dart'; import '../../../models/documents/style.dart';
import '../../../models/themes/quill_icon_theme.dart'; import '../../../models/themes/quill_icon_theme.dart';
import '../../controller.dart'; import '../../others/controller.dart';
import '../base_toolbar.dart'; import '../base_toolbar.dart';
class QuillToolbarSelectHeaderStyleButtons extends StatefulWidget { class QuillToolbarSelectHeaderStyleButtons extends StatefulWidget {

@ -8,7 +8,7 @@ import '../../../models/documents/attribute.dart';
import '../../../models/documents/style.dart'; import '../../../models/documents/style.dart';
import '../../../models/themes/quill_icon_theme.dart'; import '../../../models/themes/quill_icon_theme.dart';
import '../../../utils/widgets.dart'; import '../../../utils/widgets.dart';
import '../../controller.dart'; import '../../others/controller.dart';
import 'toggle_style_button.dart'; import 'toggle_style_button.dart';
class QuillToolbarToggleCheckListButton extends StatefulWidget { class QuillToolbarToggleCheckListButton extends StatefulWidget {

@ -6,7 +6,7 @@ import '../../../models/documents/attribute.dart';
import '../../../models/documents/style.dart'; import '../../../models/documents/style.dart';
import '../../../models/themes/quill_icon_theme.dart'; import '../../../models/themes/quill_icon_theme.dart';
import '../../../utils/widgets.dart'; import '../../../utils/widgets.dart';
import '../../controller.dart'; import '../../others/controller.dart';
import '../base_toolbar.dart'; import '../base_toolbar.dart';
typedef ToggleStyleButtonBuilder = Widget Function( typedef ToggleStyleButtonBuilder = Widget Function(

@ -2,20 +2,21 @@ import 'package:flutter/material.dart';
import '../../extensions/quill_provider.dart'; import '../../extensions/quill_provider.dart';
import '../../l10n/extensions/localizations.dart'; import '../../l10n/extensions/localizations.dart';
import '../../models/config/toolbar/base_toolbar_configurations.dart'; import '../../models/config/toolbar/toolbar_configurations.dart';
import '../../models/documents/attribute.dart'; import '../../models/documents/attribute.dart';
import '../utils/provider.dart'; import '../utils/provider.dart';
import 'base_toolbar.dart'; import 'base_toolbar.dart';
import 'buttons/select_header_style_button.dart'; import 'buttons/select_header_style_button.dart';
class QuillToolbar extends StatelessWidget implements PreferredSizeWidget { class QuillSimpleToolbar extends StatelessWidget
const QuillToolbar({ implements PreferredSizeWidget {
const QuillSimpleToolbar({
required this.configurations, required this.configurations,
super.key, super.key,
}); });
/// The configurations for the toolbar widget of flutter quill /// The configurations for the toolbar widget of flutter quill
final QuillToolbarConfigurations configurations; final QuillSimpleToolbarConfigurations configurations;
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
@ -50,8 +51,8 @@ class QuillToolbar extends StatelessWidget implements PreferredSizeWidget {
return QuillToolbarProvider( return QuillToolbarProvider(
toolbarConfigurations: configurations, toolbarConfigurations: configurations,
child: QuillBaseToolbar( child: QuillToolbar(
configurations: QuillBaseToolbarConfigurations( configurations: QuillToolbarConfigurations(
color: configurations.color, color: configurations.color,
decoration: configurations.decoration, decoration: configurations.decoration,
toolbarSectionSpacing: configurations.toolbarSectionSpacing, toolbarSectionSpacing: configurations.toolbarSectionSpacing,
@ -126,6 +127,36 @@ class QuillToolbar extends StatelessWidget implements PreferredSizeWidget {
), ),
spacerWidget, spacerWidget,
], ],
if (configurations.showItalicButton) ...[
QuillToolbarToggleStyleButton(
attribute: Attribute.italic,
options: toolbarConfigurations.buttonOptions.italic,
controller:
toolbarConfigurations.buttonOptions.italic.controller ??
globalController,
),
spacerWidget,
],
if (configurations.showUnderLineButton) ...[
QuillToolbarToggleStyleButton(
attribute: Attribute.underline,
options: toolbarConfigurations.buttonOptions.underLine,
controller: toolbarConfigurations
.buttonOptions.underLine.controller ??
globalController,
),
spacerWidget,
],
if (configurations.showInlineCode) ...[
QuillToolbarToggleStyleButton(
attribute: Attribute.inlineCode,
options: toolbarConfigurations.buttonOptions.inlineCode,
controller: toolbarConfigurations
.buttonOptions.inlineCode.controller ??
globalController,
),
spacerWidget,
],
if (configurations.showSubscript) ...[ if (configurations.showSubscript) ...[
QuillToolbarToggleStyleButton( QuillToolbarToggleStyleButton(
attribute: Attribute.subscript, attribute: Attribute.subscript,
@ -146,16 +177,6 @@ class QuillToolbar extends StatelessWidget implements PreferredSizeWidget {
), ),
spacerWidget, spacerWidget,
], ],
if (configurations.showItalicButton) ...[
QuillToolbarToggleStyleButton(
attribute: Attribute.italic,
options: toolbarConfigurations.buttonOptions.italic,
controller:
toolbarConfigurations.buttonOptions.italic.controller ??
globalController,
),
spacerWidget,
],
if (configurations.showSmallButton) ...[ if (configurations.showSmallButton) ...[
QuillToolbarToggleStyleButton( QuillToolbarToggleStyleButton(
attribute: Attribute.small, attribute: Attribute.small,
@ -166,16 +187,6 @@ class QuillToolbar extends StatelessWidget implements PreferredSizeWidget {
), ),
spacerWidget, spacerWidget,
], ],
if (configurations.showUnderLineButton) ...[
QuillToolbarToggleStyleButton(
attribute: Attribute.underline,
options: toolbarConfigurations.buttonOptions.underLine,
controller: toolbarConfigurations
.buttonOptions.underLine.controller ??
globalController,
),
spacerWidget,
],
if (configurations.showStrikeThrough) ...[ if (configurations.showStrikeThrough) ...[
QuillToolbarToggleStyleButton( QuillToolbarToggleStyleButton(
attribute: Attribute.strikeThrough, attribute: Attribute.strikeThrough,
@ -186,16 +197,6 @@ class QuillToolbar extends StatelessWidget implements PreferredSizeWidget {
), ),
spacerWidget, spacerWidget,
], ],
if (configurations.showInlineCode) ...[
QuillToolbarToggleStyleButton(
attribute: Attribute.inlineCode,
options: toolbarConfigurations.buttonOptions.inlineCode,
controller: toolbarConfigurations
.buttonOptions.inlineCode.controller ??
globalController,
),
spacerWidget,
],
if (configurations.showColorButton) ...[ if (configurations.showColorButton) ...[
QuillToolbarColorButton( QuillToolbarColorButton(
controller: controller:

@ -3,7 +3,7 @@ import 'package:flutter/widgets.dart'
show BuildContext, InheritedWidget, Widget; show BuildContext, InheritedWidget, Widget;
import '../../models/config/quill_configurations.dart'; import '../../models/config/quill_configurations.dart';
import '../../models/config/toolbar/base_toolbar_configurations.dart'; import '../../models/config/toolbar/toolbar_configurations.dart';
class QuillProvider extends InheritedWidget { class QuillProvider extends InheritedWidget {
const QuillProvider({ const QuillProvider({
@ -72,7 +72,7 @@ class QuillToolbarProvider extends InheritedWidget {
}); });
/// The configurations for the toolbar widget of flutter quill /// The configurations for the toolbar widget of flutter quill
final QuillToolbarConfigurations toolbarConfigurations; final QuillSimpleToolbarConfigurations toolbarConfigurations;
@override @override
bool updateShouldNotify(covariant QuillToolbarProvider oldWidget) { bool updateShouldNotify(covariant QuillToolbarProvider oldWidget) {
@ -130,7 +130,7 @@ class QuillBaseToolbarProvider extends InheritedWidget {
}); });
/// The configurations for the toolbar widget of flutter quill /// The configurations for the toolbar widget of flutter quill
final QuillBaseToolbarConfigurations toolbarConfigurations; final QuillToolbarConfigurations toolbarConfigurations;
@override @override
bool updateShouldNotify(covariant QuillBaseToolbarProvider oldWidget) { bool updateShouldNotify(covariant QuillBaseToolbarProvider oldWidget) {
@ -167,10 +167,10 @@ class QuillBaseToolbarProvider extends InheritedWidget {
return provider; return provider;
} }
/// To pass the [QuillBaseToolbarConfigurations] instance as value /// To pass the [QuillToolbarConfigurations] instance as value
/// instead of creating new widget /// instead of creating new widget
static QuillBaseToolbarProvider value({ static QuillBaseToolbarProvider value({
required QuillBaseToolbarConfigurations value, required QuillToolbarConfigurations value,
required Widget child, required Widget child,
}) { }) {
return QuillBaseToolbarProvider( return QuillBaseToolbarProvider(

@ -16,8 +16,8 @@ void main() {
await tester.pumpWidget( await tester.pumpWidget(
MaterialApp( MaterialApp(
home: QuillToolbar( home: QuillSimpleToolbar(
configurations: QuillToolbarConfigurations( configurations: QuillSimpleToolbarConfigurations(
controller: controller, controller: controller,
showRedo: false, showRedo: false,
customButtons: const [ customButtons: const [
@ -40,7 +40,7 @@ void main() {
// builtinFinder.evaluate().first.widget as QuillToolbarIconButton; // builtinFinder.evaluate().first.widget as QuillToolbarIconButton;
final customFinder = find.descendant( final customFinder = find.descendant(
of: find.byType(QuillBaseToolbar), of: find.byType(QuillToolbar),
matching: find.byWidgetPredicate((widget) => matching: find.byWidgetPredicate((widget) =>
widget is QuillToolbarIconButton && widget.tooltip == tooltip), widget is QuillToolbarIconButton && widget.tooltip == tooltip),
matchRoot: true); matchRoot: true);

@ -1 +1 @@
const version = '9.0.0-dev-2'; const version = '9.0.0-dev-3';

Loading…
Cancel
Save