Organize toolbar configurations and documentation

pull/2078/head
AtlasAutocode 9 months ago
parent e6f600f633
commit f853a4e9d7
  1. 10
      README.md
  2. 2
      doc/attribute_introduction.md
  3. 1
      doc/configurations/custom_buttons.md
  4. 6
      doc/custom_embed_blocks.md
  5. 2
      doc/translation.md
  6. 3
      example/lib/screens/quill/my_quill_editor.dart
  7. 6
      example/lib/screens/quill/my_quill_toolbar.dart
  8. 19
      example/lib/screens/quill/quill_screen.dart
  9. 4
      example/lib/screens/simple/simple_screen.dart
  10. 18
      lib/src/controller/quill_controller.dart
  11. 9
      lib/src/controller/quill_controller_configurations.dart
  12. 4
      lib/src/editor/config/editor_configurations.dart
  13. 48
      lib/src/editor/editor.dart
  14. 12
      lib/src/editor/provider.dart
  15. 5
      lib/src/toolbar/base_toolbar.dart
  16. 6
      lib/src/toolbar/config/simple_toolbar_configurations.dart
  17. 108
      lib/src/toolbar/simple_toolbar.dart
  18. 6
      test/bug_fix_test.dart
  19. 4
      test/editor/editor_test.dart

@ -130,16 +130,18 @@ Instantiate a controller:
QuillController _controller = QuillController.basic(); QuillController _controller = QuillController.basic();
``` ```
Use the `QuillEditor`, and `QuillToolbar` widgets, Use the `QuillEditor`, and `QuillSimpleToolbar` widgets,
and attach the `QuillController` to them: and attach the `QuillController` to them:
```dart ```dart
QuillToolbar.simple( QuillSimpleToolbar(
configurations: QuillSimpleToolbarConfigurations(controller: _controller), controller: _controller,
configurations: QuillSimpleToolbarConfigurations(),
), ),
Expanded( Expanded(
child: QuillEditor.basic( child: QuillEditor.basic(
configurations: QuillEditorConfigurations(controller: _controller), controller: _controller,
configurations: const QuillEditorConfigurations(),
), ),
) )
``` ```

@ -85,8 +85,8 @@ On `QuillEditor` or `QuillEditorConfigurations` **doesn't exist** a param that l
##### The editor ##### The editor
```dart ```dart
QuillEditor.basic( QuillEditor.basic(
controller: controller,
configurations: QuillEditorConfigurations( configurations: QuillEditorConfigurations(
controller: controller,
customStyleBuilder: (Attribute<dynamic> attribute) { customStyleBuilder: (Attribute<dynamic> attribute) {
if (attribute.key.equals(highlightKey)) { if (attribute.key.equals(highlightKey)) {
return TextStyle(color: Colors.black, backgroundColor: Colors.yellow); return TextStyle(color: Colors.black, backgroundColor: Colors.yellow);

@ -22,6 +22,7 @@ Each `QuillCustomButton` is used as part of the `customButtons` option as follow
```dart ```dart
QuillToolbar.simple( QuillToolbar.simple(
controller: _controller,
configurations: QuillSimpleToolbarConfigurations( configurations: QuillSimpleToolbarConfigurations(
customButtons: [ customButtons: [
QuillToolbarCustomButtonOptions( QuillToolbarCustomButtonOptions(

@ -98,10 +98,8 @@ Future<void> _addEditNote(BuildContext context, {Document? document}) async {
], ],
), ),
content: QuillEditor.basic( content: QuillEditor.basic(
configurations: const QuillEditorConfigurations( controller: quillEditorController,
controller: quillEditorController, configurations: const QuillEditorConfigurations(),
readOnly: false,
),
), ),
), ),
); );

@ -6,8 +6,8 @@ with:
```dart ```dart
QuillToolbar.simple( QuillToolbar.simple(
controller: _controller,
configurations: QuillSimpleToolbarConfigurations( configurations: QuillSimpleToolbarConfigurations(
controller: _controller,
sharedConfigurations: const QuillSharedConfigurations( sharedConfigurations: const QuillSharedConfigurations(
locale: Locale('de'), locale: Locale('de'),
), ),

@ -18,12 +18,14 @@ import 'embeds/timestamp_embed.dart';
class MyQuillEditor extends StatelessWidget { class MyQuillEditor extends StatelessWidget {
const MyQuillEditor({ const MyQuillEditor({
required this.controller,
required this.configurations, required this.configurations,
required this.scrollController, required this.scrollController,
required this.focusNode, required this.focusNode,
super.key, super.key,
}); });
final QuillController controller;
final QuillEditorConfigurations configurations; final QuillEditorConfigurations configurations;
final ScrollController scrollController; final ScrollController scrollController;
final FocusNode focusNode; final FocusNode focusNode;
@ -34,6 +36,7 @@ class MyQuillEditor extends StatelessWidget {
return QuillEditor( return QuillEditor(
scrollController: scrollController, scrollController: scrollController,
focusNode: focusNode, focusNode: focusNode,
controller: controller,
configurations: configurations.copyWith( configurations: configurations.copyWith(
elementOptions: const QuillEditorElementOptions( elementOptions: const QuillEditorElementOptions(
codeBlock: QuillEditorCodeBlockElementOptions( codeBlock: QuillEditorCodeBlockElementOptions(

@ -203,8 +203,12 @@ class MyQuillToolbar extends StatelessWidget {
); );
} }
return QuillToolbar.simple( return QuillToolbar.simple(
controller: controller,
/// configurations parameter:
/// Optional: if not provided will use the configuration set when the controller was instantiated.
/// Override: Provide parameter here to override the default configuration - useful if configuration will change.
configurations: QuillSimpleToolbarConfigurations( configurations: QuillSimpleToolbarConfigurations(
controller: controller,
showAlignmentButtons: true, showAlignmentButtons: true,
multiRowsDisplay: true, multiRowsDisplay: true,
fontFamilyValues: { fontFamilyValues: {

@ -33,7 +33,18 @@ class QuillScreen extends StatefulWidget {
} }
class _QuillScreenState extends State<QuillScreen> { class _QuillScreenState extends State<QuillScreen> {
final _controller = QuillController.basic(); /// Instantiate the controller
final _controller = QuillController.basic(
configurations: const QuillControllerConfigurations(
/// Set default editor configuration (Recommended if configuration will never change, but can be overridden when editor is built)
editorConfigurations:
QuillEditorConfigurations(padding: EdgeInsets.all(5)),
/// Set default toolbar configuration (Recommended if configuration will never change, but can be overridden when toolbar is built)
toolbarConfigurations: QuillSimpleToolbarConfigurations(
searchButtonType: SearchButtonType.modern)),
);
final _editorFocusNode = FocusNode(); final _editorFocusNode = FocusNode();
final _editorScrollController = ScrollController(); final _editorScrollController = ScrollController();
var _isReadOnly = false; var _isReadOnly = false;
@ -101,9 +112,13 @@ class _QuillScreenState extends State<QuillScreen> {
builder: (context) { builder: (context) {
return Expanded( return Expanded(
child: MyQuillEditor( child: MyQuillEditor(
controller: _controller,
/// configurations parameter:
/// Optional: if not provided will use the configuration set when the controller was instantiated.
/// Override: Provide parameter here to override the default configuration - useful if configuration will change.
configurations: QuillEditorConfigurations( configurations: QuillEditorConfigurations(
sharedConfigurations: _sharedConfigurations, sharedConfigurations: _sharedConfigurations,
controller: _controller,
), ),
scrollController: _editorScrollController, scrollController: _editorScrollController,
focusNode: _editorFocusNode, focusNode: _editorFocusNode,

@ -18,8 +18,8 @@ class _SimpleScreenState extends State<SimpleScreen> {
body: Column( body: Column(
children: [ children: [
QuillToolbar.simple( QuillToolbar.simple(
configurations: controller: _controller,
QuillSimpleToolbarConfigurations(controller: _controller), configurations: const QuillSimpleToolbarConfigurations(),
), ),
Expanded( Expanded(
child: QuillEditor.basic( child: QuillEditor.basic(

@ -19,6 +19,7 @@ import '../document/structs/doc_change.dart';
import '../document/style.dart'; import '../document/style.dart';
import '../editor/config/editor_configurations.dart'; import '../editor/config/editor_configurations.dart';
import '../editor_toolbar_controller_shared/clipboard/clipboard_service_provider.dart'; import '../editor_toolbar_controller_shared/clipboard/clipboard_service_provider.dart';
import '../toolbar/config/simple_toolbar_configurations.dart';
import 'quill_controller_configurations.dart'; import 'quill_controller_configurations.dart';
typedef ReplaceTextCallback = bool Function(int index, int len, Object? data); typedef ReplaceTextCallback = bool Function(int index, int len, Object? data);
@ -59,10 +60,25 @@ class QuillController extends ChangeNotifier {
/// Fail safe: returns a default editor configuration. /// Fail safe: returns a default editor configuration.
QuillEditorConfigurations? _editorConfigurations; QuillEditorConfigurations? _editorConfigurations;
QuillEditorConfigurations get editorConfigurations => QuillEditorConfigurations get editorConfigurations =>
_editorConfigurations ?? configurations.editorConfigurations ?? const QuillEditorConfigurations(); _editorConfigurations ??
configurations.editorConfigurations ??
const QuillEditorConfigurations();
set editorConfigurations(QuillEditorConfigurations? value) => set editorConfigurations(QuillEditorConfigurations? value) =>
_editorConfigurations = value; _editorConfigurations = value;
/// Toolbar configurations
///
/// Global default can be set in QuillControllerConfigurations.
/// Can be overridden by setting in QuillSimpleToolbar ctor.
/// Fail safe: returns a default toolbar configuration.
QuillSimpleToolbarConfigurations? _toolbarConfigurations;
QuillSimpleToolbarConfigurations get toolbarConfigurations =>
_toolbarConfigurations ??
configurations.toolbarConfigurations ??
const QuillSimpleToolbarConfigurations();
set toolbarConfigurations(QuillSimpleToolbarConfigurations? value) =>
_toolbarConfigurations = value;
/// Document managed by this controller. /// Document managed by this controller.
Document _document; Document _document;

@ -1,10 +1,11 @@
import '../editor/config/editor_configurations.dart' show QuillEditorConfigurations; import '../editor/config/editor_configurations.dart'
import '../toolbar/config/toolbar_configurations.dart'; show QuillEditorConfigurations;
import '../toolbar/config/simple_toolbar_configurations.dart';
class QuillControllerConfigurations { class QuillControllerConfigurations {
const QuillControllerConfigurations( const QuillControllerConfigurations(
{this.editorConfigurations, {this.editorConfigurations,
this.toolbarConfigurations, this.toolbarConfigurations,
this.onClipboardPaste, this.onClipboardPaste,
this.requireScriptFontFeatures = false}); this.requireScriptFontFeatures = false});
@ -12,7 +13,7 @@ class QuillControllerConfigurations {
/// ///
/// Future: will be changed to 'required final' /// Future: will be changed to 'required final'
final QuillEditorConfigurations? editorConfigurations; final QuillEditorConfigurations? editorConfigurations;
final QuillToolbarConfigurations? toolbarConfigurations; final QuillSimpleToolbarConfigurations? toolbarConfigurations;
/// Callback when the user pastes and data has not already been processed /// Callback when the user pastes and data has not already been processed
/// ///

@ -24,7 +24,8 @@ class QuillEditorConfigurations extends Equatable {
/// Important note for the maintainers /// Important note for the maintainers
/// When editing this class please update the [copyWith] function too. /// When editing this class please update the [copyWith] function too.
const QuillEditorConfigurations({ const QuillEditorConfigurations({
@Deprecated('controller should be passed directly to the editor - this parameter will be removed in future versions.') @Deprecated(
'controller should be passed directly to the editor - this parameter will be removed in future versions.')
this.controller, this.controller,
this.sharedConfigurations = const QuillSharedConfigurations(), this.sharedConfigurations = const QuillSharedConfigurations(),
this.scrollable = true, this.scrollable = true,
@ -446,6 +447,7 @@ class QuillEditorConfigurations extends Equatable {
}) { }) {
return QuillEditorConfigurations( return QuillEditorConfigurations(
sharedConfigurations: sharedConfigurations ?? this.sharedConfigurations, sharedConfigurations: sharedConfigurations ?? this.sharedConfigurations,
// ignore: deprecated_member_use_from_same_package
controller: controller ?? this.controller, controller: controller ?? this.controller,
placeholder: placeholder ?? this.placeholder, placeholder: placeholder ?? this.placeholder,
checkBoxReadOnly: checkBoxReadOnly ?? this.checkBoxReadOnly, checkBoxReadOnly: checkBoxReadOnly ?? this.checkBoxReadOnly,

@ -121,11 +121,27 @@ abstract class RenderAbstractEditor implements TextLayoutMetrics {
} }
class QuillEditor extends StatefulWidget { class QuillEditor extends StatefulWidget {
/// Quick start guide:
//TODO - sample code ///
factory QuillEditor ({ /// Instantiate a controller:
/// QuillController _controller = QuillController.basic();
///
/// Connect the controller to the `QuillEditor` and `QuillSimpleToolbar` widgets.
/// QuillSimpleToolbar(
/// controller: _controller,
/// configurations: const QuillSimpleToolbarConfigurations(),
/// ),
/// Expanded(
/// child: QuillEditor.basic(
/// controller: _controller,
/// configurations: const QuillEditorConfigurations(),
/// ),
/// ),
///
factory QuillEditor({
required FocusNode focusNode, required FocusNode focusNode,
required ScrollController scrollController, required ScrollController scrollController,
/// Controller and configurations are required /// Controller and configurations are required
/// ///
/// Prefer: use controller and pass QuillEditorConfigurations in constructor for controller (using QuillControllerConfigurations). /// Prefer: use controller and pass QuillEditorConfigurations in constructor for controller (using QuillControllerConfigurations).
@ -134,25 +150,31 @@ class QuillEditor extends StatefulWidget {
QuillEditorConfigurations? configurations, QuillEditorConfigurations? configurations,
}) { }) {
controller ??= configurations?.controller; controller ??= configurations?.controller;
assert (controller != null, 'controller required. Provide controller directly (preferred) or indirectly through configurations (not recommended - will be removed in future versions).'); assert(controller != null,
controller ??= QuillController(document: Document(), selection: const TextSelection.collapsed(offset: 0)); 'controller required. Provide controller directly (preferred) or indirectly through configurations (not recommended - will be removed in future versions).');
controller ??= QuillController(
document: Document(),
selection: const TextSelection.collapsed(offset: 0));
// //
controller controller
..editorConfigurations = configurations ..editorConfigurations = configurations
..editorFocusNode = focusNode; ..editorFocusNode = focusNode;
// //
return QuillEditor._(focusNode: focusNode, scrollController: scrollController, controller: controller); return QuillEditor._(
focusNode: focusNode,
scrollController: scrollController,
controller: controller);
} }
const QuillEditor._({ const QuillEditor._(
required this.focusNode, {required this.focusNode,
required this.scrollController, required this.scrollController,
required this.controller required this.controller});
});
factory QuillEditor.basic({ factory QuillEditor.basic({
/// The controller for the quill editor widget of flutter quill /// The controller for the quill editor widget of flutter quill
QuillController? controller, QuillController? controller,
/// The configurations for the quill editor widget of flutter quill /// The configurations for the quill editor widget of flutter quill
QuillEditorConfigurations? configurations, QuillEditorConfigurations? configurations,
FocusNode? focusNode, FocusNode? focusNode,
@ -170,7 +192,8 @@ class QuillEditor extends StatefulWidget {
final QuillController controller; final QuillController controller;
/// The configurations for the quill editor widget of flutter quill /// The configurations for the quill editor widget of flutter quill
QuillEditorConfigurations get configurations => controller.editorConfigurations; QuillEditorConfigurations get configurations =>
controller.editorConfigurations;
/// Controls whether this editor has keyboard focus. /// Controls whether this editor has keyboard focus.
final FocusNode focusNode; final FocusNode focusNode;
@ -259,7 +282,6 @@ class QuillEditorState extends State<QuillEditor>
final child = FlutterQuillLocalizationsWidget( final child = FlutterQuillLocalizationsWidget(
child: QuillEditorProvider( child: QuillEditorProvider(
controller: controller, controller: controller,
editorConfigurations: configurations,
child: QuillEditorBuilderWidget( child: QuillEditorBuilderWidget(
builder: configurations.builder, builder: configurations.builder,
child: QuillRawEditor( child: QuillRawEditor(

@ -8,17 +8,23 @@ import 'config/editor_configurations.dart';
class QuillEditorProvider extends InheritedWidget { class QuillEditorProvider extends InheritedWidget {
QuillEditorProvider({ QuillEditorProvider({
required super.child, required super.child,
/// Controller and configurations are required but should only be provided from one. /// Controller and configurations are required but should only be provided from one.
/// ///
/// Passing the controller as part of configurations is being deprecated and will be removed in the future. /// Passing the controller as part of configurations is being deprecated and will be removed in the future.
/// Prefer: use controller and set QuillEditorConfigurations in the controller. /// Prefer: use controller and set QuillEditorConfigurations in the controller.
/// Current: use configurations and pass QuillController in constructor for configurations. /// Current: use configurations and pass QuillController in constructor for configurations.
QuillController? controller, QuillController? controller,
@Deprecated('editorConfigurations are no longer needed and will be removed in future versions. Set configurations in the controller') @Deprecated(
'editorConfigurations are no longer needed and will be removed in future versions. Set configurations in the controller')
QuillEditorConfigurations? editorConfigurations, QuillEditorConfigurations? editorConfigurations,
super.key, super.key,
}) : editorConfigurations = editorConfigurations ?? controller?.editorConfigurations ?? QuillEditorConfigurations(controller: controller!), }) : editorConfigurations = editorConfigurations ??
controller = controller ?? editorConfigurations?.controller ?? QuillController.basic(); controller?.editorConfigurations ??
const QuillEditorConfigurations(),
controller = controller ??
editorConfigurations?.controller ??
QuillController.basic();
final QuillController controller; final QuillController controller;
final QuillEditorConfigurations editorConfigurations; final QuillEditorConfigurations editorConfigurations;

@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
import '../../flutter_quill.dart' import '../../flutter_quill.dart'
show QuillToolbarProvider, kDefaultToolbarSize; show QuillToolbarProvider, kDefaultToolbarSize;
import '../controller/quill_controller.dart';
import '../l10n/widgets/localizations.dart'; import '../l10n/widgets/localizations.dart';
import 'config/simple_toolbar_configurations.dart'; import 'config/simple_toolbar_configurations.dart';
import 'config/toolbar_configurations.dart'; import 'config/toolbar_configurations.dart';
@ -40,8 +41,10 @@ class QuillToolbar extends StatelessWidget implements PreferredSizeWidget {
}); });
static QuillSimpleToolbar simple( static QuillSimpleToolbar simple(
{required QuillSimpleToolbarConfigurations configurations}) { {QuillController? controller,
QuillSimpleToolbarConfigurations? configurations}) {
return QuillSimpleToolbar( return QuillSimpleToolbar(
controller: controller,
configurations: configurations, configurations: configurations,
); );
} }

@ -80,7 +80,9 @@ enum SearchButtonType {
@immutable @immutable
class QuillSimpleToolbarConfigurations extends QuillSharedToolbarProperties { class QuillSimpleToolbarConfigurations extends QuillSharedToolbarProperties {
const QuillSimpleToolbarConfigurations({ const QuillSimpleToolbarConfigurations({
required this.controller, @Deprecated(
'controller should be passed directly to the toolbar - this parameter will be removed in future versions.')
this.controller,
super.sharedConfigurations, super.sharedConfigurations,
super.toolbarSectionSpacing = kToolbarSectionSpacing, super.toolbarSectionSpacing = kToolbarSectionSpacing,
super.toolbarIconAlignment = WrapAlignment.center, super.toolbarIconAlignment = WrapAlignment.center,
@ -166,7 +168,7 @@ class QuillSimpleToolbarConfigurations extends QuillSharedToolbarProperties {
final Map<String, String>? fontFamilyValues; final Map<String, String>? fontFamilyValues;
final QuillController controller; final QuillController? controller;
/// By default it will be /// By default it will be
/// ```dart /// ```dart

@ -1,6 +1,8 @@
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import '../controller/quill_controller.dart';
import '../document/attribute.dart'; import '../document/attribute.dart';
import '../document/document.dart';
import 'base_toolbar.dart'; import 'base_toolbar.dart';
import 'buttons/alignment/select_alignment_buttons.dart'; import 'buttons/alignment/select_alignment_buttons.dart';
import 'buttons/arrow_indicated_list_button.dart'; import 'buttons/arrow_indicated_list_button.dart';
@ -9,13 +11,40 @@ import 'simple_toolbar_provider.dart';
class QuillSimpleToolbar extends StatelessWidget class QuillSimpleToolbar extends StatelessWidget
implements PreferredSizeWidget { implements PreferredSizeWidget {
const QuillSimpleToolbar({ factory QuillSimpleToolbar({
required this.configurations, /// Controller and configurations are required
///
/// Prefer: use controller and pass QuillEditorConfigurations in constructor for controller (using QuillControllerConfigurations).
/// Backward compatibility: use configurations and pass QuillController in constructor for configurations. (Will be removed in future versions.)
QuillSimpleToolbarConfigurations? configurations,
QuillController? controller,
Key? key,
}) {
controller ??= configurations?.controller;
assert(controller != null,
'controller required. Provide controller directly (preferred) or indirectly through configurations (not recommended - will be removed in future versions).');
controller ??= QuillController(
document: Document(),
selection: const TextSelection.collapsed(offset: 0));
//
controller.toolbarConfigurations = configurations;
//
return QuillSimpleToolbar._(
controller: controller,
key: key,
);
}
const QuillSimpleToolbar._({
required this.controller,
super.key, super.key,
}); });
final QuillController controller;
/// The configurations for the toolbar widget of flutter quill /// The configurations for the toolbar widget of flutter quill
final QuillSimpleToolbarConfigurations configurations; QuillSimpleToolbarConfigurations get configurations =>
controller.toolbarConfigurations;
double get _toolbarSize => configurations.toolbarSize * 1.4; double get _toolbarSize => configurations.toolbarSize * 1.4;
@ -30,7 +59,6 @@ class QuillSimpleToolbar extends StatelessWidget
final globalIconSize = toolbarConfigurations.buttonOptions.base.iconSize; final globalIconSize = toolbarConfigurations.buttonOptions.base.iconSize;
final axis = toolbarConfigurations.axis; final axis = toolbarConfigurations.axis;
final globalController = configurations.controller;
final divider = SizedBox( final divider = SizedBox(
height: _toolbarSize, height: _toolbarSize,
@ -46,93 +74,93 @@ class QuillSimpleToolbar extends StatelessWidget
QuillToolbarHistoryButton( QuillToolbarHistoryButton(
isUndo: true, isUndo: true,
options: toolbarConfigurations.buttonOptions.undoHistory, options: toolbarConfigurations.buttonOptions.undoHistory,
controller: globalController, controller: controller,
), ),
if (configurations.showRedo) if (configurations.showRedo)
QuillToolbarHistoryButton( QuillToolbarHistoryButton(
isUndo: false, isUndo: false,
options: toolbarConfigurations.buttonOptions.redoHistory, options: toolbarConfigurations.buttonOptions.redoHistory,
controller: globalController, controller: controller,
), ),
if (configurations.showFontFamily) if (configurations.showFontFamily)
QuillToolbarFontFamilyButton( QuillToolbarFontFamilyButton(
options: toolbarConfigurations.buttonOptions.fontFamily, options: toolbarConfigurations.buttonOptions.fontFamily,
controller: globalController, controller: controller,
), ),
if (configurations.showFontSize) if (configurations.showFontSize)
QuillToolbarFontSizeButton( QuillToolbarFontSizeButton(
options: toolbarConfigurations.buttonOptions.fontSize, options: toolbarConfigurations.buttonOptions.fontSize,
controller: globalController, controller: controller,
), ),
if (configurations.showBoldButton) if (configurations.showBoldButton)
QuillToolbarToggleStyleButton( QuillToolbarToggleStyleButton(
attribute: Attribute.bold, attribute: Attribute.bold,
options: toolbarConfigurations.buttonOptions.bold, options: toolbarConfigurations.buttonOptions.bold,
controller: globalController, controller: controller,
), ),
if (configurations.showItalicButton) if (configurations.showItalicButton)
QuillToolbarToggleStyleButton( QuillToolbarToggleStyleButton(
attribute: Attribute.italic, attribute: Attribute.italic,
options: toolbarConfigurations.buttonOptions.italic, options: toolbarConfigurations.buttonOptions.italic,
controller: globalController, controller: controller,
), ),
if (configurations.showUnderLineButton) if (configurations.showUnderLineButton)
QuillToolbarToggleStyleButton( QuillToolbarToggleStyleButton(
attribute: Attribute.underline, attribute: Attribute.underline,
options: toolbarConfigurations.buttonOptions.underLine, options: toolbarConfigurations.buttonOptions.underLine,
controller: globalController, controller: controller,
), ),
if (configurations.showStrikeThrough) if (configurations.showStrikeThrough)
QuillToolbarToggleStyleButton( QuillToolbarToggleStyleButton(
attribute: Attribute.strikeThrough, attribute: Attribute.strikeThrough,
options: toolbarConfigurations.buttonOptions.strikeThrough, options: toolbarConfigurations.buttonOptions.strikeThrough,
controller: globalController, controller: controller,
), ),
if (configurations.showInlineCode) if (configurations.showInlineCode)
QuillToolbarToggleStyleButton( QuillToolbarToggleStyleButton(
attribute: Attribute.inlineCode, attribute: Attribute.inlineCode,
options: toolbarConfigurations.buttonOptions.inlineCode, options: toolbarConfigurations.buttonOptions.inlineCode,
controller: globalController, controller: controller,
), ),
if (configurations.showSubscript) if (configurations.showSubscript)
QuillToolbarToggleStyleButton( QuillToolbarToggleStyleButton(
attribute: Attribute.subscript, attribute: Attribute.subscript,
options: toolbarConfigurations.buttonOptions.subscript, options: toolbarConfigurations.buttonOptions.subscript,
controller: globalController, controller: controller,
), ),
if (configurations.showSuperscript) if (configurations.showSuperscript)
QuillToolbarToggleStyleButton( QuillToolbarToggleStyleButton(
attribute: Attribute.superscript, attribute: Attribute.superscript,
options: toolbarConfigurations.buttonOptions.superscript, options: toolbarConfigurations.buttonOptions.superscript,
controller: globalController, controller: controller,
), ),
if (configurations.showSmallButton) if (configurations.showSmallButton)
QuillToolbarToggleStyleButton( QuillToolbarToggleStyleButton(
attribute: Attribute.small, attribute: Attribute.small,
options: toolbarConfigurations.buttonOptions.small, options: toolbarConfigurations.buttonOptions.small,
controller: globalController, controller: controller,
), ),
if (configurations.showColorButton) if (configurations.showColorButton)
QuillToolbarColorButton( QuillToolbarColorButton(
controller: globalController, controller: controller,
isBackground: false, isBackground: false,
options: toolbarConfigurations.buttonOptions.color, options: toolbarConfigurations.buttonOptions.color,
), ),
if (configurations.showBackgroundColorButton) if (configurations.showBackgroundColorButton)
QuillToolbarColorButton( QuillToolbarColorButton(
options: toolbarConfigurations.buttonOptions.backgroundColor, options: toolbarConfigurations.buttonOptions.backgroundColor,
controller: globalController, controller: controller,
isBackground: true, isBackground: true,
), ),
if (configurations.showClearFormat) if (configurations.showClearFormat)
QuillToolbarClearFormatButton( QuillToolbarClearFormatButton(
controller: globalController, controller: controller,
options: toolbarConfigurations.buttonOptions.clearFormat, options: toolbarConfigurations.buttonOptions.clearFormat,
), ),
if (theEmbedButtons != null) if (theEmbedButtons != null)
for (final builder in theEmbedButtons) for (final builder in theEmbedButtons)
builder( builder(
globalController, controller,
globalIconSize ?? kDefaultIconSize, globalIconSize ?? kDefaultIconSize,
context.quillToolbarBaseButtonOptions?.iconTheme, context.quillToolbarBaseButtonOptions?.iconTheme,
configurations.dialogTheme), configurations.dialogTheme),
@ -140,7 +168,7 @@ class QuillSimpleToolbar extends StatelessWidget
[ [
if (configurations.showAlignmentButtons) if (configurations.showAlignmentButtons)
QuillToolbarSelectAlignmentButtons( QuillToolbarSelectAlignmentButtons(
controller: globalController, controller: controller,
options: toolbarConfigurations options: toolbarConfigurations
.buttonOptions.selectAlignmentButtons .buttonOptions.selectAlignmentButtons
.copyWith( .copyWith(
@ -154,26 +182,26 @@ class QuillSimpleToolbar extends StatelessWidget
QuillToolbarToggleStyleButton( QuillToolbarToggleStyleButton(
attribute: Attribute.rtl, attribute: Attribute.rtl,
options: toolbarConfigurations.buttonOptions.direction, options: toolbarConfigurations.buttonOptions.direction,
controller: globalController, controller: controller,
), ),
], ],
[ [
if (configurations.showLineHeightButton) if (configurations.showLineHeightButton)
QuillToolbarSelectLineHeightStyleDropdownButton( QuillToolbarSelectLineHeightStyleDropdownButton(
controller: globalController, controller: controller,
options: toolbarConfigurations options: toolbarConfigurations
.buttonOptions.selectLineHeightStyleDropdownButton, .buttonOptions.selectLineHeightStyleDropdownButton,
), ),
if (configurations.showHeaderStyle) ...[ if (configurations.showHeaderStyle) ...[
if (configurations.headerStyleType.isOriginal) if (configurations.headerStyleType.isOriginal)
QuillToolbarSelectHeaderStyleDropdownButton( QuillToolbarSelectHeaderStyleDropdownButton(
controller: globalController, controller: controller,
options: toolbarConfigurations options: toolbarConfigurations
.buttonOptions.selectHeaderStyleDropdownButton, .buttonOptions.selectHeaderStyleDropdownButton,
) )
else else
QuillToolbarSelectHeaderStyleButtons( QuillToolbarSelectHeaderStyleButtons(
controller: globalController, controller: controller,
options: toolbarConfigurations options: toolbarConfigurations
.buttonOptions.selectHeaderStyleButtons, .buttonOptions.selectHeaderStyleButtons,
), ),
@ -184,42 +212,42 @@ class QuillSimpleToolbar extends StatelessWidget
QuillToolbarToggleStyleButton( QuillToolbarToggleStyleButton(
attribute: Attribute.ol, attribute: Attribute.ol,
options: toolbarConfigurations.buttonOptions.listNumbers, options: toolbarConfigurations.buttonOptions.listNumbers,
controller: globalController, controller: controller,
), ),
if (configurations.showListBullets) if (configurations.showListBullets)
QuillToolbarToggleStyleButton( QuillToolbarToggleStyleButton(
attribute: Attribute.ul, attribute: Attribute.ul,
options: toolbarConfigurations.buttonOptions.listBullets, options: toolbarConfigurations.buttonOptions.listBullets,
controller: globalController, controller: controller,
), ),
if (configurations.showListCheck) if (configurations.showListCheck)
QuillToolbarToggleCheckListButton( QuillToolbarToggleCheckListButton(
options: toolbarConfigurations.buttonOptions.toggleCheckList, options: toolbarConfigurations.buttonOptions.toggleCheckList,
controller: globalController, controller: controller,
), ),
if (configurations.showCodeBlock) if (configurations.showCodeBlock)
QuillToolbarToggleStyleButton( QuillToolbarToggleStyleButton(
attribute: Attribute.codeBlock, attribute: Attribute.codeBlock,
options: toolbarConfigurations.buttonOptions.codeBlock, options: toolbarConfigurations.buttonOptions.codeBlock,
controller: globalController, controller: controller,
), ),
], ],
[ [
if (configurations.showQuote) if (configurations.showQuote)
QuillToolbarToggleStyleButton( QuillToolbarToggleStyleButton(
options: toolbarConfigurations.buttonOptions.quote, options: toolbarConfigurations.buttonOptions.quote,
controller: globalController, controller: controller,
attribute: Attribute.blockQuote, attribute: Attribute.blockQuote,
), ),
if (configurations.showIndent) if (configurations.showIndent)
QuillToolbarIndentButton( QuillToolbarIndentButton(
controller: globalController, controller: controller,
isIncrease: true, isIncrease: true,
options: toolbarConfigurations.buttonOptions.indentIncrease, options: toolbarConfigurations.buttonOptions.indentIncrease,
), ),
if (configurations.showIndent) if (configurations.showIndent)
QuillToolbarIndentButton( QuillToolbarIndentButton(
controller: globalController, controller: controller,
isIncrease: false, isIncrease: false,
options: toolbarConfigurations.buttonOptions.indentDecrease, options: toolbarConfigurations.buttonOptions.indentDecrease,
), ),
@ -228,40 +256,40 @@ class QuillSimpleToolbar extends StatelessWidget
if (configurations.showLink) if (configurations.showLink)
toolbarConfigurations.linkStyleType.isOriginal toolbarConfigurations.linkStyleType.isOriginal
? QuillToolbarLinkStyleButton( ? QuillToolbarLinkStyleButton(
controller: globalController, controller: controller,
options: toolbarConfigurations.buttonOptions.linkStyle, options: toolbarConfigurations.buttonOptions.linkStyle,
) )
: QuillToolbarLinkStyleButton2( : QuillToolbarLinkStyleButton2(
controller: globalController, controller: controller,
options: toolbarConfigurations.buttonOptions.linkStyle2, options: toolbarConfigurations.buttonOptions.linkStyle2,
), ),
if (configurations.showSearchButton) if (configurations.showSearchButton)
switch (configurations.searchButtonType) { switch (configurations.searchButtonType) {
SearchButtonType.legacy => QuillToolbarLegacySearchButton( SearchButtonType.legacy => QuillToolbarLegacySearchButton(
controller: globalController, controller: controller,
options: toolbarConfigurations.buttonOptions.search, options: toolbarConfigurations.buttonOptions.search,
), ),
SearchButtonType.modern => QuillToolbarSearchButton( SearchButtonType.modern => QuillToolbarSearchButton(
controller: globalController, controller: controller,
options: toolbarConfigurations.buttonOptions.search, options: toolbarConfigurations.buttonOptions.search,
), ),
}, },
if (configurations.showClipboardCut) if (configurations.showClipboardCut)
QuillToolbarClipboardButton( QuillToolbarClipboardButton(
options: toolbarConfigurations.buttonOptions.clipboardCut, options: toolbarConfigurations.buttonOptions.clipboardCut,
controller: globalController, controller: controller,
clipboardAction: ClipboardAction.cut, clipboardAction: ClipboardAction.cut,
), ),
if (configurations.showClipboardCopy) if (configurations.showClipboardCopy)
QuillToolbarClipboardButton( QuillToolbarClipboardButton(
options: toolbarConfigurations.buttonOptions.clipboardCopy, options: toolbarConfigurations.buttonOptions.clipboardCopy,
controller: globalController, controller: controller,
clipboardAction: ClipboardAction.copy, clipboardAction: ClipboardAction.copy,
), ),
if (configurations.showClipboardPaste) if (configurations.showClipboardPaste)
QuillToolbarClipboardButton( QuillToolbarClipboardButton(
options: toolbarConfigurations.buttonOptions.clipboardPaste, options: toolbarConfigurations.buttonOptions.clipboardPaste,
controller: globalController, controller: controller,
clipboardAction: ClipboardAction.paste, clipboardAction: ClipboardAction.paste,
), ),
], ],
@ -269,7 +297,7 @@ class QuillSimpleToolbar extends StatelessWidget
for (final customButton in configurations.customButtons) for (final customButton in configurations.customButtons)
QuillToolbarCustomButton( QuillToolbarCustomButton(
options: customButton, options: customButton,
controller: globalController, controller: controller,
), ),
], ],
]; ];

@ -19,10 +19,10 @@ void main() {
MaterialApp( MaterialApp(
home: Scaffold( home: Scaffold(
body: QuillSimpleToolbar( body: QuillSimpleToolbar(
configurations: QuillSimpleToolbarConfigurations( controller: controller,
controller: controller, configurations: const QuillSimpleToolbarConfigurations(
showRedo: false, showRedo: false,
customButtons: const [ customButtons: [
QuillToolbarCustomButtonOptions( QuillToolbarCustomButtonOptions(
tooltip: tooltip, tooltip: tooltip,
) )

@ -27,8 +27,8 @@ void main() {
controller: controller, controller: controller,
// ignore: avoid_redundant_argument_values // ignore: avoid_redundant_argument_values
configurations: const QuillEditorConfigurations( configurations: const QuillEditorConfigurations(
// ignore: avoid_redundant_argument_values // ignore: avoid_redundant_argument_values
), ),
), ),
), ),
); );

Loading…
Cancel
Save