From 09e5f6ef147b64500f3144679459d931fc9c4e47 Mon Sep 17 00:00:00 2001 From: AtlasAutocode Date: Sat, 20 Apr 2024 08:49:06 -0600 Subject: [PATCH] Value setting Stateful toolbar buttons derive from base class --- lib/src/widgets/quill/quill_controller.dart | 43 ++++++++++ .../base_button/stateful_base_button_ex.dart | 83 +++++++++++++++++++ 2 files changed, 126 insertions(+) create mode 100644 lib/src/widgets/toolbar/base_button/stateful_base_button_ex.dart diff --git a/lib/src/widgets/quill/quill_controller.dart b/lib/src/widgets/quill/quill_controller.dart index 234d4ee3..4f69b3ec 100644 --- a/lib/src/widgets/quill/quill_controller.dart +++ b/lib/src/widgets/quill/quill_controller.dart @@ -72,6 +72,49 @@ class QuillController extends ChangeNotifier { notifyListeners(); } + // Those are the values that the user selects and not the one + // from the current line + + /// The current font family, null to use the default one + @Deprecated('No longer used') + MapEntry? _selectedFontFamily; + + /// The current font family, null to use the default one + @Deprecated('No longer used') + MapEntry? get selectedFontFamily => _selectedFontFamily; + + @Deprecated('No longer used') + void selectFontFamily(MapEntry? newFontFamily) { + _selectedFontFamily = newFontFamily; + } + + /// The current font size, null to use the default one + @Deprecated('No longer used') + MapEntry? _selectedFontSize; + + /// The current font size, null to use the default one + @Deprecated('No longer used') + MapEntry? get selectedFontSize => _selectedFontSize; + + @Deprecated('No longer used') + void selectFontSize(MapEntry? newFontSize) { + _selectedFontSize = newFontSize; + } + + /// For the [QuillToolbarToggleStyleButton] + @Deprecated('No longer used') + final Map _selectedStyles = {}; + + /// For the [QuillToolbarToggleStyleButton] + @Deprecated('No longer used') + Map get selectedStyles => _selectedStyles; + + /// For the [QuillToolbarToggleStyleButton] + @Deprecated('No longer used') + void selectStyle(Attribute attribute, bool value) { + _selectedStyles[attribute] = value; + } + /// Tells whether to keep or reset the [toggledStyle] /// when user adds a new line. final bool keepStyleOnNewLine; diff --git a/lib/src/widgets/toolbar/base_button/stateful_base_button_ex.dart b/lib/src/widgets/toolbar/base_button/stateful_base_button_ex.dart new file mode 100644 index 00000000..eebd808d --- /dev/null +++ b/lib/src/widgets/toolbar/base_button/stateful_base_button_ex.dart @@ -0,0 +1,83 @@ +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; + +import '../../../../flutter_quill.dart'; + +/// The [T] is the options for the button +/// The [E] is the extra options for the button +abstract class QuillToolbarStatefulBaseButton< + T extends QuillToolbarBaseButtonOptions, + E extends QuillToolbarBaseButtonExtraOptions> extends StatefulWidget { + const QuillToolbarStatefulBaseButton( + {required this.controller, required this.options, super.key}); + + final T options; + + final QuillController controller; +} + +/// The [W] is the widget that creates this State +abstract class QuillToolbarBaseButtonState< + W extends QuillToolbarStatefulBaseButton, + T extends QuillToolbarBaseButtonOptions, + E extends QuillToolbarBaseButtonExtraOptions> extends State { + T get options => widget.options; + + QuillController get controller => widget.controller; + + @override + void initState() { + super.initState(); + controller.addListener(didChangeEditingValue); + } + + void didChangeEditingValue(); + + @override + void dispose() { + controller.removeListener(didChangeEditingValue); + super.dispose(); + } + + @override + void didUpdateWidget(covariant W oldWidget) { + super.didUpdateWidget(oldWidget); + if (oldWidget.controller != controller) { + oldWidget.controller.removeListener(didChangeEditingValue); + controller.addListener(didChangeEditingValue); + } + } + + String get defaultTooltip; + + String get tooltip { + return options.tooltip ?? + context.quillToolbarBaseButtonOptions?.tooltip ?? + defaultTooltip; + } + + double get iconSize { + final baseFontSize = context.quillToolbarBaseButtonOptions?.iconSize; + final iconSize = options.iconSize; + return iconSize ?? baseFontSize ?? kDefaultIconSize; + } + + double get iconButtonFactor { + final baseIconFactor = baseButtonExtraOptions?.iconButtonFactor; + final iconButtonFactor = options.iconButtonFactor; + return iconButtonFactor ?? baseIconFactor ?? kDefaultIconButtonFactor; + } + + QuillIconTheme? get iconTheme { + return options.iconTheme ?? baseButtonExtraOptions?.iconTheme; + } + + QuillToolbarBaseButtonOptions? get baseButtonExtraOptions { + return context.quillToolbarBaseButtonOptions; + } + + VoidCallback? get afterButtonPressed { + return options.afterButtonPressed ?? + baseButtonExtraOptions?.afterButtonPressed; + } +}