Skip to content

Commit b1d9a59

Browse files
authored
feat!: add config class for clipboard action buttons (#2433)
* feat!: add config class for clipboard action buttons * docs: update CHANGELOG and migration guide * chore: add a TODO for #2427
1 parent e1614b2 commit b1d9a59

File tree

5 files changed

+57
-20
lines changed

5 files changed

+57
-20
lines changed

CHANGELOG.md

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,15 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
1010
1111
## [Unreleased]
1212

13+
### Changed
14+
15+
- **BREAKING**: Change the `options` parameter class type from `QuillToolbarToggleStyleButtonOptions` to `QuillToolbarClipboardButtonOptions` in `QuillToolbarClipboardButton`. To migrate, use `QuillToolbarClipboardButtonOptions` instead of `QuillToolbarToggleStyleButtonOptions` [#2433](https://github.com/singerdmx/flutter-quill/pull/2433).
16+
1317
## [11.0.0-dev.19] - 2025-01-10
1418

1519
### Added
1620

17-
- Croatian (hr) language translation.
21+
- Croatian (hr) language translation [#2431](https://github.com/singerdmx/flutter-quill/pull/2431).
1822

1923
## [11.0.0-dev.18] - 2025-01-06
2024

doc/migration/10_to_11.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -351,6 +351,7 @@ required for **custom toolbars**.
351351
- Renames `QuillToolbarToggleCheckListButtonOptions.isShouldRequestKeyboard` to `QuillToolbarToggleCheckListButtonOptions.shouldRequestKeyboard`.
352352
- Moved `onClipboardPaste` from `QuillControllerConfig` to `QuillClipboardConfig`. Added `clipboardConfig` property to `QuillControllerConfig`.
353353
- Moved `onImagePaste` and `onGifPaste` from the editor's config (`QuillEditorConfig` or `QuillRawEditorConfig`) to the clipboard's config (`QuillClipboardConfig`), which is part of the controller's config (`QuillControllerConfig`).
354+
- Changed the options type from `QuillToolbarToggleStyleButtonOptions` to `QuillToolbarClipboardButtonOptions` in `QuillToolbarClipboardButton`, use the new options class.
354355

355356
## 💥 Breaking behavior
356357

lib/src/toolbar/buttons/clipboard_button.dart

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,13 +46,18 @@ class QuillToolbarClipboardButton extends QuillToolbarToggleStyleBaseButton {
4646
QuillToolbarClipboardButton({
4747
required super.controller,
4848
required this.clipboardAction,
49-
super.options = const QuillToolbarToggleStyleButtonOptions(),
49+
QuillToolbarClipboardButtonOptions? options,
5050

5151
/// Shares common options between all buttons, prefer the [options]
5252
/// over the [baseOptions].
5353
super.baseOptions,
5454
super.key,
55-
});
55+
}) : _options = options,
56+
super(options: options ?? const QuillToolbarClipboardButtonOptions());
57+
58+
// TODO: This field will be used by the PR: https://github.com/singerdmx/flutter-quill/pull/2427
59+
// ignore: unused_field
60+
final QuillToolbarClipboardButtonOptions? _options;
5661

5762
final ClipboardAction clipboardAction;
5863

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
/// @docImport '../../buttons/clipboard_button.dart';
2+
3+
@experimental
4+
library;
5+
6+
import 'package:meta/meta.dart';
7+
import 'toggle_style_options.dart';
8+
9+
@experimental
10+
class QuillToolbarClipboardButtonOptions
11+
extends QuillToolbarToggleStyleButtonOptions {
12+
const QuillToolbarClipboardButtonOptions({
13+
super.iconData,
14+
super.afterButtonPressed,
15+
super.childBuilder,
16+
super.iconTheme,
17+
super.tooltip,
18+
super.iconSize,
19+
super.iconButtonFactor,
20+
this.enableClipboardPaste,
21+
});
22+
23+
/// Determines if the paste button is enabled. The button is disabled and cannot be clicked if set to `false`.
24+
///
25+
/// Defaults to [ClipboardMonitor] in case of `null`, which checks if the clipboard has content to paste every second and only then enables the button, indicating to the user that they can paste something.
26+
///
27+
/// Set it to `true` to enable it even if the clipboard has no content to paste, which will do nothing on a press.
28+
final bool? enableClipboardPaste;
29+
}

lib/src/toolbar/config/simple_toolbar_button_options.dart

Lines changed: 15 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
1-
import 'package:flutter/foundation.dart' show immutable;
1+
import 'package:meta/meta.dart';
22

33
import 'base_button_options.dart';
44
import 'buttons/clear_format_options.dart';
5+
import 'buttons/clipboard_button_options.dart';
56
import 'buttons/color_options.dart';
67
import 'buttons/custom_button_options.dart';
78
import 'buttons/font_family_options.dart';
@@ -21,6 +22,7 @@ import 'buttons/toggle_style_options.dart';
2122
export '../buttons/search/search_dialog.dart';
2223
export 'base_button_options.dart';
2324
export 'buttons/clear_format_options.dart';
25+
export 'buttons/clipboard_button_options.dart';
2426
export 'buttons/color_options.dart';
2527
export 'buttons/custom_button_options.dart';
2628
export 'buttons/font_family_options.dart';
@@ -76,9 +78,12 @@ class QuillSimpleToolbarButtonOptions {
7678
this.linkStyle = const QuillToolbarLinkStyleButtonOptions(),
7779
this.linkStyle2 = const QuillToolbarLinkStyleButton2Options(),
7880
this.customButtons = const QuillToolbarCustomButtonOptions(),
79-
this.clipboardCut = const QuillToolbarToggleStyleButtonOptions(),
80-
this.clipboardCopy = const QuillToolbarToggleStyleButtonOptions(),
81-
this.clipboardPaste = const QuillToolbarToggleStyleButtonOptions(),
81+
@experimental
82+
this.clipboardCut = const QuillToolbarClipboardButtonOptions(),
83+
@experimental
84+
this.clipboardCopy = const QuillToolbarClipboardButtonOptions(),
85+
@experimental
86+
this.clipboardPaste = const QuillToolbarClipboardButtonOptions(),
8287
});
8388

8489
/// The base options that will apply to all buttons,
@@ -109,26 +114,19 @@ class QuillSimpleToolbarButtonOptions {
109114
final QuillToolbarColorButtonOptions backgroundColor;
110115
final QuillToolbarClearFormatButtonOptions clearFormat;
111116

112-
/// The reason we call this buttons in the end because this is responsible
113-
/// for all the alignment buttons and not just one, you still
114-
/// can customize the icons and tooltips
115-
/// and you have child builder
116117
final QuillToolbarSelectAlignmentButtonOptions selectAlignmentButtons;
117118

118119
final QuillToolbarSearchButtonOptions search;
119120

120-
final QuillToolbarToggleStyleButtonOptions clipboardCut;
121-
final QuillToolbarToggleStyleButtonOptions clipboardCopy;
122-
final QuillToolbarToggleStyleButtonOptions clipboardPaste;
121+
@experimental
122+
final QuillToolbarClipboardButtonOptions clipboardCut;
123+
@experimental
124+
final QuillToolbarClipboardButtonOptions clipboardCopy;
125+
@experimental
126+
final QuillToolbarClipboardButtonOptions clipboardPaste;
123127

124-
/// The reason we call this buttons in the end because this is responsible
125-
/// for all the header style buttons and not just one, you still
126-
/// can customize it and you also have child builder
127128
final QuillToolbarSelectHeaderStyleButtonsOptions selectHeaderStyleButtons;
128129

129-
/// The reason we call this buttons in the end because this is responsible
130-
/// for all the header style buttons and not just one, you still
131-
/// can customize it and you also have child builder
132130
final QuillToolbarSelectHeaderStyleDropdownButtonOptions
133131
selectHeaderStyleDropdownButton;
134132

0 commit comments

Comments
 (0)