Skip to content

Commit 2408717

Browse files
committed
feat: add config class for clipboard action buttons
1 parent 59c9da4 commit 2408717

File tree

3 files changed

+49
-19
lines changed

3 files changed

+49
-19
lines changed

lib/src/toolbar/buttons/clipboard_button.dart

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,13 +46,16 @@ 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+
final QuillToolbarClipboardButtonOptions? _options;
5659

5760
final ClipboardAction clipboardAction;
5861

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)