From 913c33cc80f65c9747974d00e6393176a00a4c74 Mon Sep 17 00:00:00 2001 From: Ellet Date: Tue, 5 Dec 2023 10:57:28 +0300 Subject: [PATCH] Dropdown QuillToolbarSelectHeaderStyleButton --- .../l10n/generated/quill_localizations.dart | 24 ++ .../generated/quill_localizations_ar.dart | 12 + .../generated/quill_localizations_bg.dart | 12 + .../generated/quill_localizations_bn.dart | 12 + .../generated/quill_localizations_cs.dart | 12 + .../generated/quill_localizations_da.dart | 12 + .../generated/quill_localizations_de.dart | 12 + .../generated/quill_localizations_en.dart | 12 + .../generated/quill_localizations_es.dart | 12 + .../generated/quill_localizations_fa.dart | 12 + .../generated/quill_localizations_fr.dart | 12 + .../generated/quill_localizations_he.dart | 12 + .../generated/quill_localizations_hi.dart | 12 + .../generated/quill_localizations_id.dart | 12 + .../generated/quill_localizations_it.dart | 12 + .../generated/quill_localizations_ja.dart | 12 + .../generated/quill_localizations_ko.dart | 12 + .../generated/quill_localizations_ms.dart | 12 + .../generated/quill_localizations_nl.dart | 12 + .../generated/quill_localizations_no.dart | 12 + .../generated/quill_localizations_pl.dart | 12 + .../generated/quill_localizations_pt.dart | 12 + .../generated/quill_localizations_ru.dart | 12 + .../generated/quill_localizations_sr.dart | 12 + .../generated/quill_localizations_sw.dart | 12 + .../generated/quill_localizations_tk.dart | 12 + .../generated/quill_localizations_tr.dart | 12 + .../generated/quill_localizations_uk.dart | 12 + .../generated/quill_localizations_ur.dart | 12 + .../generated/quill_localizations_vi.dart | 12 + .../generated/quill_localizations_zh.dart | 12 + lib/src/l10n/quill_en.arb | 4 + lib/src/l10n/untranslated.json | 132 +++++++++ lib/src/widgets/toolbar/base_toolbar.dart | 2 +- .../toolbar/buttons/color/color_button.dart | 7 +- .../buttons/select_header_style_button.dart | 278 +++++------------- .../buttons/select_header_style_buttons.dart | 235 +++++++++++++++ .../buttons/toggle_check_list_button.dart | 2 +- lib/src/widgets/toolbar/toolbar.dart | 3 +- 39 files changed, 840 insertions(+), 207 deletions(-) create mode 100644 lib/src/widgets/toolbar/buttons/select_header_style_buttons.dart diff --git a/lib/src/l10n/generated/quill_localizations.dart b/lib/src/l10n/generated/quill_localizations.dart index f4425f81..e81ddc02 100644 --- a/lib/src/l10n/generated/quill_localizations.dart +++ b/lib/src/l10n/generated/quill_localizations.dart @@ -421,6 +421,30 @@ abstract class FlutterQuillLocalizations { /// **'Header style'** String get headerStyle; + /// No description provided for @normal. + /// + /// In en, this message translates to: + /// **'Normal'** + String get normal; + + /// No description provided for @heading1. + /// + /// In en, this message translates to: + /// **'Heading 1'** + String get heading1; + + /// No description provided for @heading2. + /// + /// In en, this message translates to: + /// **'Heading 2'** + String get heading2; + + /// No description provided for @heading3. + /// + /// In en, this message translates to: + /// **'Heading 3'** + String get heading3; + /// No description provided for @numberedList. /// /// In en, this message translates to: diff --git a/lib/src/l10n/generated/quill_localizations_ar.dart b/lib/src/l10n/generated/quill_localizations_ar.dart index fc7b2dfc..c8905ce7 100644 --- a/lib/src/l10n/generated/quill_localizations_ar.dart +++ b/lib/src/l10n/generated/quill_localizations_ar.dart @@ -136,6 +136,18 @@ class FlutterQuillLocalizationsAr extends FlutterQuillLocalizations { @override String get headerStyle => 'ستايل العنوان'; + @override + String get normal => 'Normal'; + + @override + String get heading1 => 'Heading 1'; + + @override + String get heading2 => 'Heading 2'; + + @override + String get heading3 => 'Heading 3'; + @override String get numberedList => 'قائمة مرقمة'; diff --git a/lib/src/l10n/generated/quill_localizations_bg.dart b/lib/src/l10n/generated/quill_localizations_bg.dart index a75b6ffa..6869b457 100644 --- a/lib/src/l10n/generated/quill_localizations_bg.dart +++ b/lib/src/l10n/generated/quill_localizations_bg.dart @@ -136,6 +136,18 @@ class FlutterQuillLocalizationsBg extends FlutterQuillLocalizations { @override String get headerStyle => 'Стил на заглавието'; + @override + String get normal => 'Normal'; + + @override + String get heading1 => 'Heading 1'; + + @override + String get heading2 => 'Heading 2'; + + @override + String get heading3 => 'Heading 3'; + @override String get numberedList => 'Номериран списък'; diff --git a/lib/src/l10n/generated/quill_localizations_bn.dart b/lib/src/l10n/generated/quill_localizations_bn.dart index 7ef340ef..930d7d6c 100644 --- a/lib/src/l10n/generated/quill_localizations_bn.dart +++ b/lib/src/l10n/generated/quill_localizations_bn.dart @@ -136,6 +136,18 @@ class FlutterQuillLocalizationsBn extends FlutterQuillLocalizations { @override String get headerStyle => 'হেডার স্টাইল'; + @override + String get normal => 'Normal'; + + @override + String get heading1 => 'Heading 1'; + + @override + String get heading2 => 'Heading 2'; + + @override + String get heading3 => 'Heading 3'; + @override String get numberedList => 'সংখ্যাযুক্ত তালিকা'; diff --git a/lib/src/l10n/generated/quill_localizations_cs.dart b/lib/src/l10n/generated/quill_localizations_cs.dart index a74f6756..e55d8c81 100644 --- a/lib/src/l10n/generated/quill_localizations_cs.dart +++ b/lib/src/l10n/generated/quill_localizations_cs.dart @@ -136,6 +136,18 @@ class FlutterQuillLocalizationsCs extends FlutterQuillLocalizations { @override String get headerStyle => 'Styl záhlaví'; + @override + String get normal => 'Normal'; + + @override + String get heading1 => 'Heading 1'; + + @override + String get heading2 => 'Heading 2'; + + @override + String get heading3 => 'Heading 3'; + @override String get numberedList => 'Číslovaný seznam'; diff --git a/lib/src/l10n/generated/quill_localizations_da.dart b/lib/src/l10n/generated/quill_localizations_da.dart index 6e8825fc..b969adbc 100644 --- a/lib/src/l10n/generated/quill_localizations_da.dart +++ b/lib/src/l10n/generated/quill_localizations_da.dart @@ -136,6 +136,18 @@ class FlutterQuillLocalizationsDa extends FlutterQuillLocalizations { @override String get headerStyle => 'Header style'; + @override + String get normal => 'Normal'; + + @override + String get heading1 => 'Heading 1'; + + @override + String get heading2 => 'Heading 2'; + + @override + String get heading3 => 'Heading 3'; + @override String get numberedList => 'Numbered list'; diff --git a/lib/src/l10n/generated/quill_localizations_de.dart b/lib/src/l10n/generated/quill_localizations_de.dart index 384b8ea3..ddbf7af2 100644 --- a/lib/src/l10n/generated/quill_localizations_de.dart +++ b/lib/src/l10n/generated/quill_localizations_de.dart @@ -136,6 +136,18 @@ class FlutterQuillLocalizationsDe extends FlutterQuillLocalizations { @override String get headerStyle => 'Überschrift-Stil'; + @override + String get normal => 'Normal'; + + @override + String get heading1 => 'Heading 1'; + + @override + String get heading2 => 'Heading 2'; + + @override + String get heading3 => 'Heading 3'; + @override String get numberedList => 'Nummerierte Liste'; diff --git a/lib/src/l10n/generated/quill_localizations_en.dart b/lib/src/l10n/generated/quill_localizations_en.dart index 1233f1cf..8a6fa0dc 100644 --- a/lib/src/l10n/generated/quill_localizations_en.dart +++ b/lib/src/l10n/generated/quill_localizations_en.dart @@ -136,6 +136,18 @@ class FlutterQuillLocalizationsEn extends FlutterQuillLocalizations { @override String get headerStyle => 'Header style'; + @override + String get normal => 'Normal'; + + @override + String get heading1 => 'Heading 1'; + + @override + String get heading2 => 'Heading 2'; + + @override + String get heading3 => 'Heading 3'; + @override String get numberedList => 'Numbered list'; diff --git a/lib/src/l10n/generated/quill_localizations_es.dart b/lib/src/l10n/generated/quill_localizations_es.dart index 3c63865d..a0b8c59d 100644 --- a/lib/src/l10n/generated/quill_localizations_es.dart +++ b/lib/src/l10n/generated/quill_localizations_es.dart @@ -136,6 +136,18 @@ class FlutterQuillLocalizationsEs extends FlutterQuillLocalizations { @override String get headerStyle => 'Header style'; + @override + String get normal => 'Normal'; + + @override + String get heading1 => 'Heading 1'; + + @override + String get heading2 => 'Heading 2'; + + @override + String get heading3 => 'Heading 3'; + @override String get numberedList => 'Numbered list'; diff --git a/lib/src/l10n/generated/quill_localizations_fa.dart b/lib/src/l10n/generated/quill_localizations_fa.dart index 32040119..088cd13d 100644 --- a/lib/src/l10n/generated/quill_localizations_fa.dart +++ b/lib/src/l10n/generated/quill_localizations_fa.dart @@ -136,6 +136,18 @@ class FlutterQuillLocalizationsFa extends FlutterQuillLocalizations { @override String get headerStyle => 'سبک هدر'; + @override + String get normal => 'Normal'; + + @override + String get heading1 => 'Heading 1'; + + @override + String get heading2 => 'Heading 2'; + + @override + String get heading3 => 'Heading 3'; + @override String get numberedList => 'لیست شماره‌دار'; diff --git a/lib/src/l10n/generated/quill_localizations_fr.dart b/lib/src/l10n/generated/quill_localizations_fr.dart index b94451ff..d7ce3c0a 100644 --- a/lib/src/l10n/generated/quill_localizations_fr.dart +++ b/lib/src/l10n/generated/quill_localizations_fr.dart @@ -136,6 +136,18 @@ class FlutterQuillLocalizationsFr extends FlutterQuillLocalizations { @override String get headerStyle => "Style d'en-tête"; + @override + String get normal => 'Normal'; + + @override + String get heading1 => 'Heading 1'; + + @override + String get heading2 => 'Heading 2'; + + @override + String get heading3 => 'Heading 3'; + @override String get numberedList => 'Liste numérotée'; diff --git a/lib/src/l10n/generated/quill_localizations_he.dart b/lib/src/l10n/generated/quill_localizations_he.dart index 956c10f9..939375a0 100644 --- a/lib/src/l10n/generated/quill_localizations_he.dart +++ b/lib/src/l10n/generated/quill_localizations_he.dart @@ -136,6 +136,18 @@ class FlutterQuillLocalizationsHe extends FlutterQuillLocalizations { @override String get headerStyle => 'סגנון הכותרת'; + @override + String get normal => 'Normal'; + + @override + String get heading1 => 'Heading 1'; + + @override + String get heading2 => 'Heading 2'; + + @override + String get heading3 => 'Heading 3'; + @override String get numberedList => 'רשימה ממוספרת'; diff --git a/lib/src/l10n/generated/quill_localizations_hi.dart b/lib/src/l10n/generated/quill_localizations_hi.dart index 3e2e738a..69f19b37 100644 --- a/lib/src/l10n/generated/quill_localizations_hi.dart +++ b/lib/src/l10n/generated/quill_localizations_hi.dart @@ -136,6 +136,18 @@ class FlutterQuillLocalizationsHi extends FlutterQuillLocalizations { @override String get headerStyle => 'हेडर शैली'; + @override + String get normal => 'Normal'; + + @override + String get heading1 => 'Heading 1'; + + @override + String get heading2 => 'Heading 2'; + + @override + String get heading3 => 'Heading 3'; + @override String get numberedList => 'संख्याबद्ध सूची'; diff --git a/lib/src/l10n/generated/quill_localizations_id.dart b/lib/src/l10n/generated/quill_localizations_id.dart index 4d4d38c5..c664f677 100644 --- a/lib/src/l10n/generated/quill_localizations_id.dart +++ b/lib/src/l10n/generated/quill_localizations_id.dart @@ -136,6 +136,18 @@ class FlutterQuillLocalizationsId extends FlutterQuillLocalizations { @override String get headerStyle => 'Gaya Header'; + @override + String get normal => 'Normal'; + + @override + String get heading1 => 'Heading 1'; + + @override + String get heading2 => 'Heading 2'; + + @override + String get heading3 => 'Heading 3'; + @override String get numberedList => 'Daftar Bernomor'; diff --git a/lib/src/l10n/generated/quill_localizations_it.dart b/lib/src/l10n/generated/quill_localizations_it.dart index 2b8fe070..74bf7389 100644 --- a/lib/src/l10n/generated/quill_localizations_it.dart +++ b/lib/src/l10n/generated/quill_localizations_it.dart @@ -136,6 +136,18 @@ class FlutterQuillLocalizationsIt extends FlutterQuillLocalizations { @override String get headerStyle => 'Stile intestazione'; + @override + String get normal => 'Normal'; + + @override + String get heading1 => 'Heading 1'; + + @override + String get heading2 => 'Heading 2'; + + @override + String get heading3 => 'Heading 3'; + @override String get numberedList => 'Elenco numerato'; diff --git a/lib/src/l10n/generated/quill_localizations_ja.dart b/lib/src/l10n/generated/quill_localizations_ja.dart index 7a55d6b5..364a3214 100644 --- a/lib/src/l10n/generated/quill_localizations_ja.dart +++ b/lib/src/l10n/generated/quill_localizations_ja.dart @@ -136,6 +136,18 @@ class FlutterQuillLocalizationsJa extends FlutterQuillLocalizations { @override String get headerStyle => 'タイトルスタイル'; + @override + String get normal => 'Normal'; + + @override + String get heading1 => 'Heading 1'; + + @override + String get heading2 => 'Heading 2'; + + @override + String get heading3 => 'Heading 3'; + @override String get numberedList => '順序付きリスト'; diff --git a/lib/src/l10n/generated/quill_localizations_ko.dart b/lib/src/l10n/generated/quill_localizations_ko.dart index c8a6b566..5a46e10b 100644 --- a/lib/src/l10n/generated/quill_localizations_ko.dart +++ b/lib/src/l10n/generated/quill_localizations_ko.dart @@ -136,6 +136,18 @@ class FlutterQuillLocalizationsKo extends FlutterQuillLocalizations { @override String get headerStyle => 'Header style'; + @override + String get normal => 'Normal'; + + @override + String get heading1 => 'Heading 1'; + + @override + String get heading2 => 'Heading 2'; + + @override + String get heading3 => 'Heading 3'; + @override String get numberedList => 'Numbered list'; diff --git a/lib/src/l10n/generated/quill_localizations_ms.dart b/lib/src/l10n/generated/quill_localizations_ms.dart index c443712f..9b929a38 100644 --- a/lib/src/l10n/generated/quill_localizations_ms.dart +++ b/lib/src/l10n/generated/quill_localizations_ms.dart @@ -136,6 +136,18 @@ class FlutterQuillLocalizationsMs extends FlutterQuillLocalizations { @override String get headerStyle => 'Header style'; + @override + String get normal => 'Normal'; + + @override + String get heading1 => 'Heading 1'; + + @override + String get heading2 => 'Heading 2'; + + @override + String get heading3 => 'Heading 3'; + @override String get numberedList => 'Numbered list'; diff --git a/lib/src/l10n/generated/quill_localizations_nl.dart b/lib/src/l10n/generated/quill_localizations_nl.dart index 65bc5b47..5a0f6eb6 100644 --- a/lib/src/l10n/generated/quill_localizations_nl.dart +++ b/lib/src/l10n/generated/quill_localizations_nl.dart @@ -136,6 +136,18 @@ class FlutterQuillLocalizationsNl extends FlutterQuillLocalizations { @override String get headerStyle => 'Header style'; + @override + String get normal => 'Normal'; + + @override + String get heading1 => 'Heading 1'; + + @override + String get heading2 => 'Heading 2'; + + @override + String get heading3 => 'Heading 3'; + @override String get numberedList => 'Numbered list'; diff --git a/lib/src/l10n/generated/quill_localizations_no.dart b/lib/src/l10n/generated/quill_localizations_no.dart index 087c6997..6d6b278c 100644 --- a/lib/src/l10n/generated/quill_localizations_no.dart +++ b/lib/src/l10n/generated/quill_localizations_no.dart @@ -136,6 +136,18 @@ class FlutterQuillLocalizationsNo extends FlutterQuillLocalizations { @override String get headerStyle => 'Overskriftsstil'; + @override + String get normal => 'Normal'; + + @override + String get heading1 => 'Heading 1'; + + @override + String get heading2 => 'Heading 2'; + + @override + String get heading3 => 'Heading 3'; + @override String get numberedList => 'Nummerert liste'; diff --git a/lib/src/l10n/generated/quill_localizations_pl.dart b/lib/src/l10n/generated/quill_localizations_pl.dart index 677ff5c8..0f6ce73c 100644 --- a/lib/src/l10n/generated/quill_localizations_pl.dart +++ b/lib/src/l10n/generated/quill_localizations_pl.dart @@ -136,6 +136,18 @@ class FlutterQuillLocalizationsPl extends FlutterQuillLocalizations { @override String get headerStyle => 'Header style'; + @override + String get normal => 'Normal'; + + @override + String get heading1 => 'Heading 1'; + + @override + String get heading2 => 'Heading 2'; + + @override + String get heading3 => 'Heading 3'; + @override String get numberedList => 'Numbered list'; diff --git a/lib/src/l10n/generated/quill_localizations_pt.dart b/lib/src/l10n/generated/quill_localizations_pt.dart index bec9b366..d4184f11 100644 --- a/lib/src/l10n/generated/quill_localizations_pt.dart +++ b/lib/src/l10n/generated/quill_localizations_pt.dart @@ -136,6 +136,18 @@ class FlutterQuillLocalizationsPt extends FlutterQuillLocalizations { @override String get headerStyle => 'Header style'; + @override + String get normal => 'Normal'; + + @override + String get heading1 => 'Heading 1'; + + @override + String get heading2 => 'Heading 2'; + + @override + String get heading3 => 'Heading 3'; + @override String get numberedList => 'Numbered list'; diff --git a/lib/src/l10n/generated/quill_localizations_ru.dart b/lib/src/l10n/generated/quill_localizations_ru.dart index 96a9314b..0237b47b 100644 --- a/lib/src/l10n/generated/quill_localizations_ru.dart +++ b/lib/src/l10n/generated/quill_localizations_ru.dart @@ -136,6 +136,18 @@ class FlutterQuillLocalizationsRu extends FlutterQuillLocalizations { @override String get headerStyle => 'Header style'; + @override + String get normal => 'Normal'; + + @override + String get heading1 => 'Heading 1'; + + @override + String get heading2 => 'Heading 2'; + + @override + String get heading3 => 'Heading 3'; + @override String get numberedList => 'Numbered list'; diff --git a/lib/src/l10n/generated/quill_localizations_sr.dart b/lib/src/l10n/generated/quill_localizations_sr.dart index 1e89073e..b1366486 100644 --- a/lib/src/l10n/generated/quill_localizations_sr.dart +++ b/lib/src/l10n/generated/quill_localizations_sr.dart @@ -136,6 +136,18 @@ class FlutterQuillLocalizationsSr extends FlutterQuillLocalizations { @override String get headerStyle => 'Stil zaglavlja'; + @override + String get normal => 'Normal'; + + @override + String get heading1 => 'Heading 1'; + + @override + String get heading2 => 'Heading 2'; + + @override + String get heading3 => 'Heading 3'; + @override String get numberedList => 'Numerisana lista'; diff --git a/lib/src/l10n/generated/quill_localizations_sw.dart b/lib/src/l10n/generated/quill_localizations_sw.dart index 64040360..c9d6e0eb 100644 --- a/lib/src/l10n/generated/quill_localizations_sw.dart +++ b/lib/src/l10n/generated/quill_localizations_sw.dart @@ -136,6 +136,18 @@ class FlutterQuillLocalizationsSw extends FlutterQuillLocalizations { @override String get headerStyle => 'Mtindo wa Mada'; + @override + String get normal => 'Normal'; + + @override + String get heading1 => 'Heading 1'; + + @override + String get heading2 => 'Heading 2'; + + @override + String get heading3 => 'Heading 3'; + @override String get numberedList => 'Orodha ya Nambari'; diff --git a/lib/src/l10n/generated/quill_localizations_tk.dart b/lib/src/l10n/generated/quill_localizations_tk.dart index 13e7b1d3..ce9e3ca2 100644 --- a/lib/src/l10n/generated/quill_localizations_tk.dart +++ b/lib/src/l10n/generated/quill_localizations_tk.dart @@ -136,6 +136,18 @@ class FlutterQuillLocalizationsTk extends FlutterQuillLocalizations { @override String get headerStyle => 'Sözbaşy stili'; + @override + String get normal => 'Normal'; + + @override + String get heading1 => 'Heading 1'; + + @override + String get heading2 => 'Heading 2'; + + @override + String get heading3 => 'Heading 3'; + @override String get numberedList => 'Sanly sanaw'; diff --git a/lib/src/l10n/generated/quill_localizations_tr.dart b/lib/src/l10n/generated/quill_localizations_tr.dart index e6c52e9a..2c1e34d1 100644 --- a/lib/src/l10n/generated/quill_localizations_tr.dart +++ b/lib/src/l10n/generated/quill_localizations_tr.dart @@ -136,6 +136,18 @@ class FlutterQuillLocalizationsTr extends FlutterQuillLocalizations { @override String get headerStyle => 'Başlık Stili'; + @override + String get normal => 'Normal'; + + @override + String get heading1 => 'Heading 1'; + + @override + String get heading2 => 'Heading 2'; + + @override + String get heading3 => 'Heading 3'; + @override String get numberedList => 'Numaralı Liste'; diff --git a/lib/src/l10n/generated/quill_localizations_uk.dart b/lib/src/l10n/generated/quill_localizations_uk.dart index f7a273a5..8df86ed4 100644 --- a/lib/src/l10n/generated/quill_localizations_uk.dart +++ b/lib/src/l10n/generated/quill_localizations_uk.dart @@ -136,6 +136,18 @@ class FlutterQuillLocalizationsUk extends FlutterQuillLocalizations { @override String get headerStyle => 'Стиль заголовка'; + @override + String get normal => 'Normal'; + + @override + String get heading1 => 'Heading 1'; + + @override + String get heading2 => 'Heading 2'; + + @override + String get heading3 => 'Heading 3'; + @override String get numberedList => 'Нумерований список'; diff --git a/lib/src/l10n/generated/quill_localizations_ur.dart b/lib/src/l10n/generated/quill_localizations_ur.dart index 79c665f5..ca096539 100644 --- a/lib/src/l10n/generated/quill_localizations_ur.dart +++ b/lib/src/l10n/generated/quill_localizations_ur.dart @@ -136,6 +136,18 @@ class FlutterQuillLocalizationsUr extends FlutterQuillLocalizations { @override String get headerStyle => 'ہیڈر کا انداز'; + @override + String get normal => 'Normal'; + + @override + String get heading1 => 'Heading 1'; + + @override + String get heading2 => 'Heading 2'; + + @override + String get heading3 => 'Heading 3'; + @override String get numberedList => 'مرقم فہرست'; diff --git a/lib/src/l10n/generated/quill_localizations_vi.dart b/lib/src/l10n/generated/quill_localizations_vi.dart index 6f26695b..ea53ab87 100644 --- a/lib/src/l10n/generated/quill_localizations_vi.dart +++ b/lib/src/l10n/generated/quill_localizations_vi.dart @@ -136,6 +136,18 @@ class FlutterQuillLocalizationsVi extends FlutterQuillLocalizations { @override String get headerStyle => 'Kiểu tiêu đề'; + @override + String get normal => 'Normal'; + + @override + String get heading1 => 'Heading 1'; + + @override + String get heading2 => 'Heading 2'; + + @override + String get heading3 => 'Heading 3'; + @override String get numberedList => 'Danh sách có số'; diff --git a/lib/src/l10n/generated/quill_localizations_zh.dart b/lib/src/l10n/generated/quill_localizations_zh.dart index 59ba0ce1..8277c60b 100644 --- a/lib/src/l10n/generated/quill_localizations_zh.dart +++ b/lib/src/l10n/generated/quill_localizations_zh.dart @@ -136,6 +136,18 @@ class FlutterQuillLocalizationsZh extends FlutterQuillLocalizations { @override String get headerStyle => '标题样式'; + @override + String get normal => 'Normal'; + + @override + String get heading1 => 'Heading 1'; + + @override + String get heading2 => 'Heading 2'; + + @override + String get heading3 => 'Heading 3'; + @override String get numberedList => '编号列表'; diff --git a/lib/src/l10n/quill_en.arb b/lib/src/l10n/quill_en.arb index 0d4d737f..49bb30b4 100644 --- a/lib/src/l10n/quill_en.arb +++ b/lib/src/l10n/quill_en.arb @@ -44,6 +44,10 @@ "justifyWinWidth": "Justify win width", "textDirection": "Text direction", "headerStyle": "Header style", + "normal": "Normal", + "heading1": "Heading 1", + "heading2": "Heading 2", + "heading3": "Heading 3", "numberedList": "Numbered list", "bulletList": "Bullet list", "checkedList": "Checked list", diff --git a/lib/src/l10n/untranslated.json b/lib/src/l10n/untranslated.json index d6c2ff3d..d6a5a21a 100644 --- a/lib/src/l10n/untranslated.json +++ b/lib/src/l10n/untranslated.json @@ -1,5 +1,9 @@ { "ar": [ + "normal", + "heading1", + "heading2", + "heading3", "pickAPhotoFromYourGallery", "takeAPhotoUsingYourCamera", "pasteAPhotoUsingALink", @@ -9,6 +13,10 @@ ], "bg": [ + "normal", + "heading1", + "heading2", + "heading3", "pickAPhotoFromYourGallery", "takeAPhotoUsingYourCamera", "pasteAPhotoUsingALink", @@ -18,6 +26,10 @@ ], "bn": [ + "normal", + "heading1", + "heading2", + "heading3", "pickAPhotoFromYourGallery", "takeAPhotoUsingYourCamera", "pasteAPhotoUsingALink", @@ -27,6 +39,10 @@ ], "cs": [ + "normal", + "heading1", + "heading2", + "heading3", "pickAPhotoFromYourGallery", "takeAPhotoUsingYourCamera", "pasteAPhotoUsingALink", @@ -36,6 +52,10 @@ ], "da": [ + "normal", + "heading1", + "heading2", + "heading3", "pickAPhotoFromYourGallery", "takeAPhotoUsingYourCamera", "pasteAPhotoUsingALink", @@ -45,6 +65,10 @@ ], "de": [ + "normal", + "heading1", + "heading2", + "heading3", "pickAPhotoFromYourGallery", "takeAPhotoUsingYourCamera", "pasteAPhotoUsingALink", @@ -54,6 +78,10 @@ ], "en_US": [ + "normal", + "heading1", + "heading2", + "heading3", "pickAPhotoFromYourGallery", "takeAPhotoUsingYourCamera", "pasteAPhotoUsingALink", @@ -63,6 +91,10 @@ ], "es": [ + "normal", + "heading1", + "heading2", + "heading3", "pickAPhotoFromYourGallery", "takeAPhotoUsingYourCamera", "pasteAPhotoUsingALink", @@ -72,6 +104,10 @@ ], "fa": [ + "normal", + "heading1", + "heading2", + "heading3", "pickAPhotoFromYourGallery", "takeAPhotoUsingYourCamera", "pasteAPhotoUsingALink", @@ -81,6 +117,10 @@ ], "fr": [ + "normal", + "heading1", + "heading2", + "heading3", "pickAPhotoFromYourGallery", "takeAPhotoUsingYourCamera", "pasteAPhotoUsingALink", @@ -90,6 +130,10 @@ ], "he": [ + "normal", + "heading1", + "heading2", + "heading3", "pickAPhotoFromYourGallery", "takeAPhotoUsingYourCamera", "pasteAPhotoUsingALink", @@ -99,6 +143,10 @@ ], "hi": [ + "normal", + "heading1", + "heading2", + "heading3", "pickAPhotoFromYourGallery", "takeAPhotoUsingYourCamera", "pasteAPhotoUsingALink", @@ -108,6 +156,10 @@ ], "id": [ + "normal", + "heading1", + "heading2", + "heading3", "pickAPhotoFromYourGallery", "takeAPhotoUsingYourCamera", "pasteAPhotoUsingALink", @@ -117,6 +169,10 @@ ], "it": [ + "normal", + "heading1", + "heading2", + "heading3", "pickAPhotoFromYourGallery", "takeAPhotoUsingYourCamera", "pasteAPhotoUsingALink", @@ -126,6 +182,10 @@ ], "ja": [ + "normal", + "heading1", + "heading2", + "heading3", "pickAPhotoFromYourGallery", "takeAPhotoUsingYourCamera", "pasteAPhotoUsingALink", @@ -135,6 +195,10 @@ ], "ko": [ + "normal", + "heading1", + "heading2", + "heading3", "pickAPhotoFromYourGallery", "takeAPhotoUsingYourCamera", "pasteAPhotoUsingALink", @@ -144,6 +208,10 @@ ], "ms": [ + "normal", + "heading1", + "heading2", + "heading3", "pickAPhotoFromYourGallery", "takeAPhotoUsingYourCamera", "pasteAPhotoUsingALink", @@ -153,6 +221,10 @@ ], "nl": [ + "normal", + "heading1", + "heading2", + "heading3", "pickAPhotoFromYourGallery", "takeAPhotoUsingYourCamera", "pasteAPhotoUsingALink", @@ -162,6 +234,10 @@ ], "no": [ + "normal", + "heading1", + "heading2", + "heading3", "pickAPhotoFromYourGallery", "takeAPhotoUsingYourCamera", "pasteAPhotoUsingALink", @@ -171,6 +247,10 @@ ], "pl": [ + "normal", + "heading1", + "heading2", + "heading3", "pickAPhotoFromYourGallery", "takeAPhotoUsingYourCamera", "pasteAPhotoUsingALink", @@ -180,6 +260,10 @@ ], "pt": [ + "normal", + "heading1", + "heading2", + "heading3", "pickAPhotoFromYourGallery", "takeAPhotoUsingYourCamera", "pasteAPhotoUsingALink", @@ -189,6 +273,10 @@ ], "pt_BR": [ + "normal", + "heading1", + "heading2", + "heading3", "pickAPhotoFromYourGallery", "takeAPhotoUsingYourCamera", "pasteAPhotoUsingALink", @@ -198,6 +286,10 @@ ], "ru": [ + "normal", + "heading1", + "heading2", + "heading3", "pickAPhotoFromYourGallery", "takeAPhotoUsingYourCamera", "pasteAPhotoUsingALink", @@ -207,6 +299,10 @@ ], "sr": [ + "normal", + "heading1", + "heading2", + "heading3", "pickAPhotoFromYourGallery", "takeAPhotoUsingYourCamera", "pasteAPhotoUsingALink", @@ -216,6 +312,10 @@ ], "sw": [ + "normal", + "heading1", + "heading2", + "heading3", "pickAPhotoFromYourGallery", "takeAPhotoUsingYourCamera", "pasteAPhotoUsingALink", @@ -225,6 +325,10 @@ ], "tk": [ + "normal", + "heading1", + "heading2", + "heading3", "pickAPhotoFromYourGallery", "takeAPhotoUsingYourCamera", "pasteAPhotoUsingALink", @@ -234,6 +338,10 @@ ], "tr": [ + "normal", + "heading1", + "heading2", + "heading3", "pickAPhotoFromYourGallery", "takeAPhotoUsingYourCamera", "pasteAPhotoUsingALink", @@ -243,6 +351,10 @@ ], "uk": [ + "normal", + "heading1", + "heading2", + "heading3", "pickAPhotoFromYourGallery", "takeAPhotoUsingYourCamera", "pasteAPhotoUsingALink", @@ -252,6 +364,10 @@ ], "ur": [ + "normal", + "heading1", + "heading2", + "heading3", "pickAPhotoFromYourGallery", "takeAPhotoUsingYourCamera", "pasteAPhotoUsingALink", @@ -261,6 +377,10 @@ ], "vi": [ + "normal", + "heading1", + "heading2", + "heading3", "pickAPhotoFromYourGallery", "takeAPhotoUsingYourCamera", "pasteAPhotoUsingALink", @@ -270,6 +390,10 @@ ], "zh": [ + "normal", + "heading1", + "heading2", + "heading3", "pickAPhotoFromYourGallery", "takeAPhotoUsingYourCamera", "pasteAPhotoUsingALink", @@ -279,6 +403,10 @@ ], "zh_CN": [ + "normal", + "heading1", + "heading2", + "heading3", "pickAPhotoFromYourGallery", "takeAPhotoUsingYourCamera", "pasteAPhotoUsingALink", @@ -288,6 +416,10 @@ ], "zh_HK": [ + "normal", + "heading1", + "heading2", + "heading3", "pickAPhotoFromYourGallery", "takeAPhotoUsingYourCamera", "pasteAPhotoUsingALink", diff --git a/lib/src/widgets/toolbar/base_toolbar.dart b/lib/src/widgets/toolbar/base_toolbar.dart index ba629f2c..af412d35 100644 --- a/lib/src/widgets/toolbar/base_toolbar.dart +++ b/lib/src/widgets/toolbar/base_toolbar.dart @@ -20,7 +20,7 @@ export 'buttons/link_style_button.dart'; export 'buttons/quill_icon_button.dart'; export 'buttons/search/search_button.dart'; export 'buttons/select_alignment_button.dart'; -export 'buttons/select_header_style_button.dart'; +export 'buttons/select_header_style_buttons.dart'; export 'buttons/toggle_check_list_button.dart'; export 'buttons/toggle_style_button.dart'; diff --git a/lib/src/widgets/toolbar/buttons/color/color_button.dart b/lib/src/widgets/toolbar/buttons/color/color_button.dart index 8454290a..f5b2e032 100644 --- a/lib/src/widgets/toolbar/buttons/color/color_button.dart +++ b/lib/src/widgets/toolbar/buttons/color/color_button.dart @@ -193,16 +193,13 @@ class QuillToolbarColorButtonState extends State { ); } - return QuillToolbarIconButton( + return IconButton( tooltip: tooltip, - size: iconSize * iconButtonFactor, + iconSize: iconSize * iconButtonFactor, icon: Icon(iconData, size: iconSize, color: widget.isBackground ? iconColorBackground : iconColor), - // fillColor: widget.isBackground ? fillColorBackground : fillColor, - isFilled: false, onPressed: _showColorPicker, - afterPressed: afterButtonPressed, ); } diff --git a/lib/src/widgets/toolbar/buttons/select_header_style_button.dart b/lib/src/widgets/toolbar/buttons/select_header_style_button.dart index 791b8132..0f913204 100644 --- a/lib/src/widgets/toolbar/buttons/select_header_style_button.dart +++ b/lib/src/widgets/toolbar/buttons/select_header_style_button.dart @@ -1,17 +1,19 @@ -import 'package:flutter/foundation.dart' show kIsWeb; import 'package:flutter/material.dart'; -import '../../../../extensions.dart'; -import '../../../extensions/quill_provider.dart'; -import '../../../l10n/extensions/localizations.dart'; +import '../../../../translations.dart'; +import '../../../models/config/toolbar/buttons/select_header_style.dart'; import '../../../models/documents/attribute.dart'; -import '../../../models/documents/style.dart'; -import '../../../models/themes/quill_icon_theme.dart'; import '../../controller.dart'; -import '../base_toolbar.dart'; -class QuillToolbarSelectHeaderStyleButtons extends StatefulWidget { - const QuillToolbarSelectHeaderStyleButtons({ +enum QuillToolbarSelectHeaderStyleButtonOptions { + normal, + headingOne, + headingTwo, + headingThree, +} + +class QuillToolbarSelectHeaderStyleButton extends StatefulWidget { + const QuillToolbarSelectHeaderStyleButton({ required this.controller, required this.options, super.key, @@ -21,215 +23,93 @@ class QuillToolbarSelectHeaderStyleButtons extends StatefulWidget { final QuillToolbarSelectHeaderStyleButtonsOptions options; @override - QuillToolbarSelectHeaderStyleButtonsState createState() => - QuillToolbarSelectHeaderStyleButtonsState(); + State createState() => + _QuillToolbarSelectHeaderStyleButtonState(); } -class QuillToolbarSelectHeaderStyleButtonsState - extends State { - Attribute? _selectedAttribute; - - Style get _selectionStyle => controller.getSelectionStyle(); - - final _valueToText = { - Attribute.header: 'N', - Attribute.h1: 'H1', - Attribute.h2: 'H2', - Attribute.h3: 'H3', - }; - +class _QuillToolbarSelectHeaderStyleButtonState + extends State { + var _selectedItem = QuillToolbarSelectHeaderStyleButtonOptions.normal; @override void initState() { super.initState(); - setState(() { - _selectedAttribute = _getHeaderValue(); - }); - controller.addListener(_didChangeEditingValue); - } - - QuillToolbarSelectHeaderStyleButtonsOptions get options { - return widget.options; - } - - QuillController get controller { - return widget.controller; - } - - double get iconSize { - final baseFontSize = baseButtonExtraOptions.globalIconSize; - final iconSize = options.iconSize; - return iconSize ?? baseFontSize; - } - - double get iconButtonFactor { - final baseIconFactor = baseButtonExtraOptions.globalIconButtonFactor; - final iconButtonFactor = options.iconButtonFactor; - return iconButtonFactor ?? baseIconFactor; - } - - VoidCallback? get afterButtonPressed { - return options.afterButtonPressed ?? - baseButtonExtraOptions.afterButtonPressed; - } - - QuillIconTheme? get iconTheme { - return options.iconTheme ?? baseButtonExtraOptions.iconTheme; - } - - QuillToolbarBaseButtonOptions get baseButtonExtraOptions { - return context.requireQuillToolbarBaseButtonOptions; - } - - String get tooltip { - return options.tooltip ?? - baseButtonExtraOptions.tooltip ?? - context.loc.headerStyle; - } - - Axis get axis { - return options.axis ?? - context.quillToolbarConfigurations?.axis ?? - context.quillBaseToolbarConfigurations?.axis ?? - (throw ArgumentError( - 'There is no default value for the Axis of the toolbar')); - } - - void _sharedOnPressed(Attribute attribute) { - final attribute0 = - _selectedAttribute == attribute ? Attribute.header : attribute; - controller.formatSelection(attribute0); - afterButtonPressed?.call(); - } - - List get _attrbuites { - return options.attributes ?? - const [ - Attribute.header, - Attribute.h1, - Attribute.h2, - Attribute.h3, - ]; - } - - @override - Widget build(BuildContext context) { - assert( - _attrbuites.every( - (element) => _valueToText.keys.contains(element), - ), - 'All attributes must be one of them: header, h1, h2 or h3', - ); - - final style = TextStyle( - fontWeight: FontWeight.w600, - fontSize: iconSize * 0.7, - ); - - final childBuilder = - options.childBuilder ?? baseButtonExtraOptions.childBuilder; - - final children = _attrbuites.map((attribute) { - if (childBuilder != null) { - return childBuilder( - QuillToolbarSelectHeaderStyleButtonsOptions( - afterButtonPressed: afterButtonPressed, - attributes: _attrbuites, - axis: axis, - iconSize: iconSize, - iconButtonFactor: iconButtonFactor, - iconTheme: iconTheme, - tooltip: tooltip, - ), - QuillToolbarSelectHeaderStyleButtonExtraOptions( - controller: controller, - context: context, - onPressed: () => _sharedOnPressed(attribute), - ), - ); - } - final theme = Theme.of(context); - final isSelected = _selectedAttribute == attribute; - return Padding( - padding: const EdgeInsets.symmetric(horizontal: !kIsWeb ? 1.0 : 5.0), - child: ConstrainedBox( - constraints: BoxConstraints.tightFor( - width: iconSize * iconButtonFactor, - height: iconSize * iconButtonFactor, - ), - child: UtilityWidgets.maybeTooltip( - message: tooltip, - child: RawMaterialButton( - hoverElevation: 0, - highlightElevation: 0, - elevation: 0, - visualDensity: VisualDensity.compact, - shape: RoundedRectangleBorder( - borderRadius: - BorderRadius.circular(iconTheme?.borderRadius ?? 2)), - fillColor: isSelected - ? (iconTheme?.iconSelectedFillColor ?? theme.primaryColor) - : (iconTheme?.iconUnselectedFillColor ?? theme.canvasColor), - onPressed: () => _sharedOnPressed(attribute), - child: Text( - _valueToText[attribute] ?? - (throw ArgumentError.notNull( - 'attrbuite', - )), - style: style.copyWith( - color: isSelected - ? (iconTheme?.iconSelectedColor ?? - theme.primaryIconTheme.color) - : (iconTheme?.iconUnselectedColor ?? - theme.iconTheme.color), - ), - ), - ), - ), - ), - ); - }).toList(); - - return axis == Axis.horizontal - ? Row( - mainAxisSize: MainAxisSize.min, - children: children, - ) - : Column( - mainAxisSize: MainAxisSize.min, - children: children, - ); + widget.controller.addListener(_didChangeEditingValue); } void _didChangeEditingValue() { setState(() { - _selectedAttribute = _getHeaderValue(); + _selectedItem = _getOptionsItemByAttribute(_getHeaderValue()); }); } Attribute _getHeaderValue() { - final attr = controller.toolbarButtonToggler[Attribute.header.key]; + final attr = widget.controller.toolbarButtonToggler[Attribute.header.key]; if (attr != null) { // checkbox tapping causes controller.selection to go to offset 0 - controller.toolbarButtonToggler.remove(Attribute.header.key); + widget.controller.toolbarButtonToggler.remove(Attribute.header.key); return attr; } - return _selectionStyle.attributes[Attribute.header.key] ?? Attribute.header; - } - - @override - void didUpdateWidget( - covariant QuillToolbarSelectHeaderStyleButtons oldWidget) { - super.didUpdateWidget(oldWidget); - if (oldWidget.controller != controller) { - oldWidget.controller.removeListener(_didChangeEditingValue); - controller.addListener(_didChangeEditingValue); - _selectedAttribute = _getHeaderValue(); - } + return widget.controller + .getSelectionStyle() + .attributes[Attribute.header.key] ?? + Attribute.header; + } + + String _label(QuillToolbarSelectHeaderStyleButtonOptions value) { + final label = switch (value) { + QuillToolbarSelectHeaderStyleButtonOptions.normal => context.loc.normal, + QuillToolbarSelectHeaderStyleButtonOptions.headingOne => + context.loc.heading1, + QuillToolbarSelectHeaderStyleButtonOptions.headingTwo => + context.loc.heading2, + QuillToolbarSelectHeaderStyleButtonOptions.headingThree => + context.loc.heading3, + }; + return label; + } + + Attribute? getAttributeByOptionsItem( + QuillToolbarSelectHeaderStyleButtonOptions option) { + return switch (option) { + QuillToolbarSelectHeaderStyleButtonOptions.normal => Attribute.header, + QuillToolbarSelectHeaderStyleButtonOptions.headingOne => Attribute.h1, + QuillToolbarSelectHeaderStyleButtonOptions.headingTwo => Attribute.h2, + QuillToolbarSelectHeaderStyleButtonOptions.headingThree => Attribute.h3, + }; + } + + QuillToolbarSelectHeaderStyleButtonOptions _getOptionsItemByAttribute( + Attribute? attribute) { + return switch (attribute) { + Attribute.h1 => QuillToolbarSelectHeaderStyleButtonOptions.headingOne, + Attribute.h2 => QuillToolbarSelectHeaderStyleButtonOptions.headingTwo, + Attribute.h2 => QuillToolbarSelectHeaderStyleButtonOptions.headingThree, + Attribute() => QuillToolbarSelectHeaderStyleButtonOptions.normal, + null => QuillToolbarSelectHeaderStyleButtonOptions.normal, + }; } @override - void dispose() { - controller.removeListener(_didChangeEditingValue); - super.dispose(); + Widget build(BuildContext context) { + return DropdownButton( + value: _selectedItem, + items: QuillToolbarSelectHeaderStyleButtonOptions.values + .map( + (e) => DropdownMenuItem( + value: e, + child: Text(_label(e)), + onTap: () { + widget.controller.formatSelection(getAttributeByOptionsItem(e)); + }, + ), + ) + .toList(), + onChanged: (newItem) { + if (newItem == null) { + return; + } + setState(() => _selectedItem = newItem); + }, + ); } } diff --git a/lib/src/widgets/toolbar/buttons/select_header_style_buttons.dart b/lib/src/widgets/toolbar/buttons/select_header_style_buttons.dart new file mode 100644 index 00000000..791b8132 --- /dev/null +++ b/lib/src/widgets/toolbar/buttons/select_header_style_buttons.dart @@ -0,0 +1,235 @@ +import 'package:flutter/foundation.dart' show kIsWeb; +import 'package:flutter/material.dart'; + +import '../../../../extensions.dart'; +import '../../../extensions/quill_provider.dart'; +import '../../../l10n/extensions/localizations.dart'; +import '../../../models/documents/attribute.dart'; +import '../../../models/documents/style.dart'; +import '../../../models/themes/quill_icon_theme.dart'; +import '../../controller.dart'; +import '../base_toolbar.dart'; + +class QuillToolbarSelectHeaderStyleButtons extends StatefulWidget { + const QuillToolbarSelectHeaderStyleButtons({ + required this.controller, + required this.options, + super.key, + }); + + final QuillController controller; + final QuillToolbarSelectHeaderStyleButtonsOptions options; + + @override + QuillToolbarSelectHeaderStyleButtonsState createState() => + QuillToolbarSelectHeaderStyleButtonsState(); +} + +class QuillToolbarSelectHeaderStyleButtonsState + extends State { + Attribute? _selectedAttribute; + + Style get _selectionStyle => controller.getSelectionStyle(); + + final _valueToText = { + Attribute.header: 'N', + Attribute.h1: 'H1', + Attribute.h2: 'H2', + Attribute.h3: 'H3', + }; + + @override + void initState() { + super.initState(); + setState(() { + _selectedAttribute = _getHeaderValue(); + }); + controller.addListener(_didChangeEditingValue); + } + + QuillToolbarSelectHeaderStyleButtonsOptions get options { + return widget.options; + } + + QuillController get controller { + return widget.controller; + } + + double get iconSize { + final baseFontSize = baseButtonExtraOptions.globalIconSize; + final iconSize = options.iconSize; + return iconSize ?? baseFontSize; + } + + double get iconButtonFactor { + final baseIconFactor = baseButtonExtraOptions.globalIconButtonFactor; + final iconButtonFactor = options.iconButtonFactor; + return iconButtonFactor ?? baseIconFactor; + } + + VoidCallback? get afterButtonPressed { + return options.afterButtonPressed ?? + baseButtonExtraOptions.afterButtonPressed; + } + + QuillIconTheme? get iconTheme { + return options.iconTheme ?? baseButtonExtraOptions.iconTheme; + } + + QuillToolbarBaseButtonOptions get baseButtonExtraOptions { + return context.requireQuillToolbarBaseButtonOptions; + } + + String get tooltip { + return options.tooltip ?? + baseButtonExtraOptions.tooltip ?? + context.loc.headerStyle; + } + + Axis get axis { + return options.axis ?? + context.quillToolbarConfigurations?.axis ?? + context.quillBaseToolbarConfigurations?.axis ?? + (throw ArgumentError( + 'There is no default value for the Axis of the toolbar')); + } + + void _sharedOnPressed(Attribute attribute) { + final attribute0 = + _selectedAttribute == attribute ? Attribute.header : attribute; + controller.formatSelection(attribute0); + afterButtonPressed?.call(); + } + + List get _attrbuites { + return options.attributes ?? + const [ + Attribute.header, + Attribute.h1, + Attribute.h2, + Attribute.h3, + ]; + } + + @override + Widget build(BuildContext context) { + assert( + _attrbuites.every( + (element) => _valueToText.keys.contains(element), + ), + 'All attributes must be one of them: header, h1, h2 or h3', + ); + + final style = TextStyle( + fontWeight: FontWeight.w600, + fontSize: iconSize * 0.7, + ); + + final childBuilder = + options.childBuilder ?? baseButtonExtraOptions.childBuilder; + + final children = _attrbuites.map((attribute) { + if (childBuilder != null) { + return childBuilder( + QuillToolbarSelectHeaderStyleButtonsOptions( + afterButtonPressed: afterButtonPressed, + attributes: _attrbuites, + axis: axis, + iconSize: iconSize, + iconButtonFactor: iconButtonFactor, + iconTheme: iconTheme, + tooltip: tooltip, + ), + QuillToolbarSelectHeaderStyleButtonExtraOptions( + controller: controller, + context: context, + onPressed: () => _sharedOnPressed(attribute), + ), + ); + } + final theme = Theme.of(context); + final isSelected = _selectedAttribute == attribute; + return Padding( + padding: const EdgeInsets.symmetric(horizontal: !kIsWeb ? 1.0 : 5.0), + child: ConstrainedBox( + constraints: BoxConstraints.tightFor( + width: iconSize * iconButtonFactor, + height: iconSize * iconButtonFactor, + ), + child: UtilityWidgets.maybeTooltip( + message: tooltip, + child: RawMaterialButton( + hoverElevation: 0, + highlightElevation: 0, + elevation: 0, + visualDensity: VisualDensity.compact, + shape: RoundedRectangleBorder( + borderRadius: + BorderRadius.circular(iconTheme?.borderRadius ?? 2)), + fillColor: isSelected + ? (iconTheme?.iconSelectedFillColor ?? theme.primaryColor) + : (iconTheme?.iconUnselectedFillColor ?? theme.canvasColor), + onPressed: () => _sharedOnPressed(attribute), + child: Text( + _valueToText[attribute] ?? + (throw ArgumentError.notNull( + 'attrbuite', + )), + style: style.copyWith( + color: isSelected + ? (iconTheme?.iconSelectedColor ?? + theme.primaryIconTheme.color) + : (iconTheme?.iconUnselectedColor ?? + theme.iconTheme.color), + ), + ), + ), + ), + ), + ); + }).toList(); + + return axis == Axis.horizontal + ? Row( + mainAxisSize: MainAxisSize.min, + children: children, + ) + : Column( + mainAxisSize: MainAxisSize.min, + children: children, + ); + } + + void _didChangeEditingValue() { + setState(() { + _selectedAttribute = _getHeaderValue(); + }); + } + + Attribute _getHeaderValue() { + final attr = controller.toolbarButtonToggler[Attribute.header.key]; + if (attr != null) { + // checkbox tapping causes controller.selection to go to offset 0 + controller.toolbarButtonToggler.remove(Attribute.header.key); + return attr; + } + return _selectionStyle.attributes[Attribute.header.key] ?? Attribute.header; + } + + @override + void didUpdateWidget( + covariant QuillToolbarSelectHeaderStyleButtons oldWidget) { + super.didUpdateWidget(oldWidget); + if (oldWidget.controller != controller) { + oldWidget.controller.removeListener(_didChangeEditingValue); + controller.addListener(_didChangeEditingValue); + _selectedAttribute = _getHeaderValue(); + } + } + + @override + void dispose() { + controller.removeListener(_didChangeEditingValue); + super.dispose(); + } +} diff --git a/lib/src/widgets/toolbar/buttons/toggle_check_list_button.dart b/lib/src/widgets/toolbar/buttons/toggle_check_list_button.dart index 52ee2f1d..01ec7f92 100644 --- a/lib/src/widgets/toolbar/buttons/toggle_check_list_button.dart +++ b/lib/src/widgets/toolbar/buttons/toggle_check_list_button.dart @@ -9,7 +9,7 @@ import '../../../models/documents/style.dart'; import '../../../models/themes/quill_icon_theme.dart'; import '../../../utils/widgets.dart'; import '../../controller.dart'; -import 'toggle_style.dart'; +import 'toggle_style_button.dart'; class QuillToolbarToggleCheckListButton extends StatefulWidget { const QuillToolbarToggleCheckListButton({ diff --git a/lib/src/widgets/toolbar/toolbar.dart b/lib/src/widgets/toolbar/toolbar.dart index 8d9fc9c5..b4c9a7d3 100644 --- a/lib/src/widgets/toolbar/toolbar.dart +++ b/lib/src/widgets/toolbar/toolbar.dart @@ -6,6 +6,7 @@ import '../../models/config/toolbar/base_toolbar_configurations.dart'; import '../../models/documents/attribute.dart'; import '../utils/provider.dart'; import 'base_toolbar.dart'; +import 'buttons/select_header_style_button.dart'; class QuillToolbar extends StatelessWidget implements PreferredSizeWidget { const QuillToolbar({ @@ -286,7 +287,7 @@ class QuillToolbar extends StatelessWidget implements PreferredSizeWidget { space: configurations.sectionDividerSpace, ), if (configurations.showHeaderStyle) ...[ - QuillToolbarSelectHeaderStyleButtons( + QuillToolbarSelectHeaderStyleButton( controller: toolbarConfigurations .buttonOptions.selectHeaderStyleButtons.controller ?? globalController,