From eadd343205eb26852f7b69d79d69d528188243ba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?lollipopkit=F0=9F=8F=B3=EF=B8=8F=E2=80=8D=E2=9A=A7?= =?UTF-8?q?=EF=B8=8F?= <10864310+lollipopkit@users.noreply.github.com> Date: Fri, 5 Sep 2025 00:12:41 +0800 Subject: [PATCH] readd: home drawer Fixes #900 --- lib/generated/l10n/l10n.dart | 6 ++++++ lib/generated/l10n/l10n_de.dart | 3 +++ lib/generated/l10n/l10n_en.dart | 3 +++ lib/generated/l10n/l10n_es.dart | 3 +++ lib/generated/l10n/l10n_fr.dart | 3 +++ lib/generated/l10n/l10n_id.dart | 3 +++ lib/generated/l10n/l10n_ja.dart | 3 +++ lib/generated/l10n/l10n_nl.dart | 3 +++ lib/generated/l10n/l10n_pt.dart | 3 +++ lib/generated/l10n/l10n_ru.dart | 3 +++ lib/generated/l10n/l10n_tr.dart | 3 +++ lib/generated/l10n/l10n_uk.dart | 3 +++ lib/generated/l10n/l10n_zh.dart | 6 ++++++ lib/l10n/app_de.arb | 5 +++-- lib/l10n/app_en.arb | 3 ++- lib/l10n/app_es.arb | 5 +++-- lib/l10n/app_fr.arb | 5 +++-- lib/l10n/app_id.arb | 5 +++-- lib/l10n/app_ja.arb | 5 +++-- lib/l10n/app_nl.arb | 5 +++-- lib/l10n/app_pt.arb | 5 +++-- lib/l10n/app_ru.arb | 5 +++-- lib/l10n/app_tr.arb | 5 +++-- lib/l10n/app_uk.arb | 5 +++-- lib/l10n/app_zh.arb | 3 ++- lib/l10n/app_zh_tw.arb | 5 +++-- lib/view/page/setting/entries/home_tabs.dart | 8 ++++++-- 27 files changed, 88 insertions(+), 26 deletions(-) diff --git a/lib/generated/l10n/l10n.dart b/lib/generated/l10n/l10n.dart index e5695558..ed32ffae 100644 --- a/lib/generated/l10n/l10n.dart +++ b/lib/generated/l10n/l10n.dart @@ -1729,6 +1729,12 @@ abstract class AppLocalizations { /// In en, this message translates to: /// **'At least one tab must be selected'** String get atLeastOneTab; + + /// No description provided for @serverTabRequired. + /// + /// In en, this message translates to: + /// **'Server tab cannot be removed'** + String get serverTabRequired; } class _AppLocalizationsDelegate diff --git a/lib/generated/l10n/l10n_de.dart b/lib/generated/l10n/l10n_de.dart index 6040ef6a..49cfa24d 100644 --- a/lib/generated/l10n/l10n_de.dart +++ b/lib/generated/l10n/l10n_de.dart @@ -911,4 +911,7 @@ class AppLocalizationsDe extends AppLocalizations { @override String get atLeastOneTab => 'Mindestens ein Tab muss ausgewählt sein'; + + @override + String get serverTabRequired => 'Server-Tab kann nicht entfernt werden'; } diff --git a/lib/generated/l10n/l10n_en.dart b/lib/generated/l10n/l10n_en.dart index dfa792bd..62f41c75 100644 --- a/lib/generated/l10n/l10n_en.dart +++ b/lib/generated/l10n/l10n_en.dart @@ -903,4 +903,7 @@ class AppLocalizationsEn extends AppLocalizations { @override String get atLeastOneTab => 'At least one tab must be selected'; + + @override + String get serverTabRequired => 'Server tab cannot be removed'; } diff --git a/lib/generated/l10n/l10n_es.dart b/lib/generated/l10n/l10n_es.dart index 2ab073d0..f2d9807c 100644 --- a/lib/generated/l10n/l10n_es.dart +++ b/lib/generated/l10n/l10n_es.dart @@ -913,4 +913,7 @@ class AppLocalizationsEs extends AppLocalizations { @override String get atLeastOneTab => 'Al menos una pestaña debe estar seleccionada'; + + @override + String get serverTabRequired => 'Server tab cannot be removed'; } diff --git a/lib/generated/l10n/l10n_fr.dart b/lib/generated/l10n/l10n_fr.dart index bf647155..d653e959 100644 --- a/lib/generated/l10n/l10n_fr.dart +++ b/lib/generated/l10n/l10n_fr.dart @@ -916,4 +916,7 @@ class AppLocalizationsFr extends AppLocalizations { @override String get atLeastOneTab => 'Au moins un onglet doit être sélectionné'; + + @override + String get serverTabRequired => 'Server tab cannot be removed'; } diff --git a/lib/generated/l10n/l10n_id.dart b/lib/generated/l10n/l10n_id.dart index b4eed71c..ac66f9f7 100644 --- a/lib/generated/l10n/l10n_id.dart +++ b/lib/generated/l10n/l10n_id.dart @@ -903,4 +903,7 @@ class AppLocalizationsId extends AppLocalizations { @override String get atLeastOneTab => 'Setidaknya satu tab harus dipilih'; + + @override + String get serverTabRequired => 'Server tab cannot be removed'; } diff --git a/lib/generated/l10n/l10n_ja.dart b/lib/generated/l10n/l10n_ja.dart index 65f164d9..df730daa 100644 --- a/lib/generated/l10n/l10n_ja.dart +++ b/lib/generated/l10n/l10n_ja.dart @@ -876,4 +876,7 @@ class AppLocalizationsJa extends AppLocalizations { @override String get atLeastOneTab => '少なくとも1つのタブを選択する必要があります'; + + @override + String get serverTabRequired => 'サーバータブは削除できません'; } diff --git a/lib/generated/l10n/l10n_nl.dart b/lib/generated/l10n/l10n_nl.dart index 75089c6b..13721821 100644 --- a/lib/generated/l10n/l10n_nl.dart +++ b/lib/generated/l10n/l10n_nl.dart @@ -910,4 +910,7 @@ class AppLocalizationsNl extends AppLocalizations { @override String get atLeastOneTab => 'Er moet minimaal één tabblad worden geselecteerd'; + + @override + String get serverTabRequired => 'Server tab cannot be removed'; } diff --git a/lib/generated/l10n/l10n_pt.dart b/lib/generated/l10n/l10n_pt.dart index c9ffa858..7e3f4de0 100644 --- a/lib/generated/l10n/l10n_pt.dart +++ b/lib/generated/l10n/l10n_pt.dart @@ -906,4 +906,7 @@ class AppLocalizationsPt extends AppLocalizations { @override String get atLeastOneTab => 'Pelo menos uma aba deve ser selecionada'; + + @override + String get serverTabRequired => 'Server tab cannot be removed'; } diff --git a/lib/generated/l10n/l10n_ru.dart b/lib/generated/l10n/l10n_ru.dart index 25e2a812..4d22934e 100644 --- a/lib/generated/l10n/l10n_ru.dart +++ b/lib/generated/l10n/l10n_ru.dart @@ -908,4 +908,7 @@ class AppLocalizationsRu extends AppLocalizations { @override String get atLeastOneTab => 'Должна быть выбрана хотя бы одна вкладка'; + + @override + String get serverTabRequired => 'Server tab cannot be removed'; } diff --git a/lib/generated/l10n/l10n_tr.dart b/lib/generated/l10n/l10n_tr.dart index 1d947637..865cae02 100644 --- a/lib/generated/l10n/l10n_tr.dart +++ b/lib/generated/l10n/l10n_tr.dart @@ -903,4 +903,7 @@ class AppLocalizationsTr extends AppLocalizations { @override String get atLeastOneTab => 'En az bir sekme seçilmelidir'; + + @override + String get serverTabRequired => 'Server tab cannot be removed'; } diff --git a/lib/generated/l10n/l10n_uk.dart b/lib/generated/l10n/l10n_uk.dart index 25fd9681..625bfbc2 100644 --- a/lib/generated/l10n/l10n_uk.dart +++ b/lib/generated/l10n/l10n_uk.dart @@ -909,4 +909,7 @@ class AppLocalizationsUk extends AppLocalizations { @override String get atLeastOneTab => 'Потрібно вибрати принаймні одну вкладку'; + + @override + String get serverTabRequired => 'Server tab cannot be removed'; } diff --git a/lib/generated/l10n/l10n_zh.dart b/lib/generated/l10n/l10n_zh.dart index c2ce3137..9d9f50ea 100644 --- a/lib/generated/l10n/l10n_zh.dart +++ b/lib/generated/l10n/l10n_zh.dart @@ -861,6 +861,9 @@ class AppLocalizationsZh extends AppLocalizations { @override String get atLeastOneTab => '至少需要选择一个标签'; + + @override + String get serverTabRequired => '服务器标签不能被移除'; } /// The translations for Chinese, as used in Taiwan (`zh_TW`). @@ -1720,4 +1723,7 @@ class AppLocalizationsZhTw extends AppLocalizationsZh { @override String get atLeastOneTab => '至少需要選擇一個標籤'; + + @override + String get serverTabRequired => '服務器標籤不能被移除'; } diff --git a/lib/l10n/app_de.arb b/lib/l10n/app_de.arb index b7610cb7..4b7c5594 100644 --- a/lib/l10n/app_de.arb +++ b/lib/l10n/app_de.arb @@ -281,5 +281,6 @@ "homeTabsCustomizeDesc": "Passen Sie an, welche Tabs auf der Startseite angezeigt werden und ihre Reihenfolge", "reset": "Zurücksetzen", "availableTabs": "Verfügbare Tabs", - "atLeastOneTab": "Mindestens ein Tab muss ausgewählt sein" -} \ No newline at end of file + "atLeastOneTab": "Mindestens ein Tab muss ausgewählt sein", + "serverTabRequired": "Server-Tab kann nicht entfernt werden" +} diff --git a/lib/l10n/app_en.arb b/lib/l10n/app_en.arb index c4e79510..628d8822 100644 --- a/lib/l10n/app_en.arb +++ b/lib/l10n/app_en.arb @@ -281,5 +281,6 @@ "homeTabsCustomizeDesc": "Customize which tabs appear on the home page and their order", "reset": "Reset", "availableTabs": "Available Tabs", - "atLeastOneTab": "At least one tab must be selected" + "atLeastOneTab": "At least one tab must be selected", + "serverTabRequired": "Server tab cannot be removed" } \ No newline at end of file diff --git a/lib/l10n/app_es.arb b/lib/l10n/app_es.arb index 4c47eb89..0e4a6ce9 100644 --- a/lib/l10n/app_es.arb +++ b/lib/l10n/app_es.arb @@ -281,5 +281,6 @@ "homeTabsCustomizeDesc": "Personaliza qué pestañas aparecen en la página de inicio y su orden", "reset": "Restablecer", "availableTabs": "Pestañas disponibles", - "atLeastOneTab": "Al menos una pestaña debe estar seleccionada" -} \ No newline at end of file + "atLeastOneTab": "Al menos una pestaña debe estar seleccionada", + "serverTabRequired": "Server tab cannot be removed" +} diff --git a/lib/l10n/app_fr.arb b/lib/l10n/app_fr.arb index ee2c93b9..eba86d9c 100644 --- a/lib/l10n/app_fr.arb +++ b/lib/l10n/app_fr.arb @@ -281,5 +281,6 @@ "homeTabsCustomizeDesc": "Personnalisez les onglets qui apparaissent sur la page d'accueil et leur ordre", "reset": "Réinitialiser", "availableTabs": "Onglets disponibles", - "atLeastOneTab": "Au moins un onglet doit être sélectionné" -} \ No newline at end of file + "atLeastOneTab": "Au moins un onglet doit être sélectionné", + "serverTabRequired": "Server tab cannot be removed" +} diff --git a/lib/l10n/app_id.arb b/lib/l10n/app_id.arb index e747cf33..6ff6d6c0 100644 --- a/lib/l10n/app_id.arb +++ b/lib/l10n/app_id.arb @@ -281,5 +281,6 @@ "homeTabsCustomizeDesc": "Sesuaikan tab mana yang muncul di halaman beranda dan urutannya", "reset": "Reset", "availableTabs": "Tab Tersedia", - "atLeastOneTab": "Setidaknya satu tab harus dipilih" -} \ No newline at end of file + "atLeastOneTab": "Setidaknya satu tab harus dipilih", + "serverTabRequired": "Server tab cannot be removed" +} diff --git a/lib/l10n/app_ja.arb b/lib/l10n/app_ja.arb index 94eebd9d..ac91199e 100644 --- a/lib/l10n/app_ja.arb +++ b/lib/l10n/app_ja.arb @@ -281,5 +281,6 @@ "homeTabsCustomizeDesc": "ホームページに表示するタブとその順序をカスタマイズします", "reset": "リセット", "availableTabs": "利用可能なタブ", - "atLeastOneTab": "少なくとも1つのタブを選択する必要があります" -} \ No newline at end of file + "atLeastOneTab": "少なくとも1つのタブを選択する必要があります", + "serverTabRequired": "サーバータブは削除できません" +} diff --git a/lib/l10n/app_nl.arb b/lib/l10n/app_nl.arb index 29612fd4..fe1f439c 100644 --- a/lib/l10n/app_nl.arb +++ b/lib/l10n/app_nl.arb @@ -281,5 +281,6 @@ "homeTabsCustomizeDesc": "Pas aan welke tabbladen op de startpagina worden weergegeven en hun volgorde", "reset": "Resetten", "availableTabs": "Beschikbare tabbladen", - "atLeastOneTab": "Er moet minimaal één tabblad worden geselecteerd" -} \ No newline at end of file + "atLeastOneTab": "Er moet minimaal één tabblad worden geselecteerd", + "serverTabRequired": "Server tab cannot be removed" +} diff --git a/lib/l10n/app_pt.arb b/lib/l10n/app_pt.arb index a6f79beb..d20a150d 100644 --- a/lib/l10n/app_pt.arb +++ b/lib/l10n/app_pt.arb @@ -281,5 +281,6 @@ "homeTabsCustomizeDesc": "Personalize quais abas aparecem na página inicial e sua ordem", "reset": "Redefinir", "availableTabs": "Abas disponíveis", - "atLeastOneTab": "Pelo menos uma aba deve ser selecionada" -} \ No newline at end of file + "atLeastOneTab": "Pelo menos uma aba deve ser selecionada", + "serverTabRequired": "Server tab cannot be removed" +} diff --git a/lib/l10n/app_ru.arb b/lib/l10n/app_ru.arb index cc4191b2..0090e8cd 100644 --- a/lib/l10n/app_ru.arb +++ b/lib/l10n/app_ru.arb @@ -281,5 +281,6 @@ "homeTabsCustomizeDesc": "Настройте, какие вкладки появляются на главной странице и их порядок", "reset": "Сброс", "availableTabs": "Доступные вкладки", - "atLeastOneTab": "Должна быть выбрана хотя бы одна вкладка" -} \ No newline at end of file + "atLeastOneTab": "Должна быть выбрана хотя бы одна вкладка", + "serverTabRequired": "Server tab cannot be removed" +} diff --git a/lib/l10n/app_tr.arb b/lib/l10n/app_tr.arb index 80692cf3..d18504ca 100644 --- a/lib/l10n/app_tr.arb +++ b/lib/l10n/app_tr.arb @@ -281,5 +281,6 @@ "homeTabsCustomizeDesc": "Ana sayfada görünecek sekmeleri ve sıralarını özelleştirin", "reset": "Sıfırla", "availableTabs": "Mevcut Sekmeler", - "atLeastOneTab": "En az bir sekme seçilmelidir" -} \ No newline at end of file + "atLeastOneTab": "En az bir sekme seçilmelidir", + "serverTabRequired": "Server tab cannot be removed" +} diff --git a/lib/l10n/app_uk.arb b/lib/l10n/app_uk.arb index a271d5ab..dd99da1f 100644 --- a/lib/l10n/app_uk.arb +++ b/lib/l10n/app_uk.arb @@ -281,5 +281,6 @@ "homeTabsCustomizeDesc": "Налаштуйте, які вкладки відображаються на головній сторінці та їх порядок", "reset": "Скинути", "availableTabs": "Доступні вкладки", - "atLeastOneTab": "Потрібно вибрати принаймні одну вкладку" -} \ No newline at end of file + "atLeastOneTab": "Потрібно вибрати принаймні одну вкладку", + "serverTabRequired": "Server tab cannot be removed" +} diff --git a/lib/l10n/app_zh.arb b/lib/l10n/app_zh.arb index 9b70a2fb..23e56185 100644 --- a/lib/l10n/app_zh.arb +++ b/lib/l10n/app_zh.arb @@ -281,5 +281,6 @@ "homeTabsCustomizeDesc": "自定义主页上显示的标签及其顺序", "reset": "重置", "availableTabs": "可用标签", - "atLeastOneTab": "至少需要选择一个标签" + "atLeastOneTab": "至少需要选择一个标签", + "serverTabRequired": "服务器标签不能被移除" } \ No newline at end of file diff --git a/lib/l10n/app_zh_tw.arb b/lib/l10n/app_zh_tw.arb index cab61a4f..0d6a61b9 100644 --- a/lib/l10n/app_zh_tw.arb +++ b/lib/l10n/app_zh_tw.arb @@ -281,5 +281,6 @@ "homeTabsCustomizeDesc": "自訂主頁上顯示的標籤及其順序", "reset": "重置", "availableTabs": "可用標籤", - "atLeastOneTab": "至少需要選擇一個標籤" -} \ No newline at end of file + "atLeastOneTab": "至少需要選擇一個標籤", + "serverTabRequired": "服務器標籤不能被移除" +} diff --git a/lib/view/page/setting/entries/home_tabs.dart b/lib/view/page/setting/entries/home_tabs.dart index 9ea4b720..854923d0 100644 --- a/lib/view/page/setting/entries/home_tabs.dart +++ b/lib/view/page/setting/entries/home_tabs.dart @@ -68,7 +68,7 @@ class _HomeTabsConfigPageState extends ConsumerState { } Widget _buildTabItem(AppTab tab, int index, bool isSelected) { - final canRemove = _selectedTabs.length > 1; + final canRemove = _selectedTabs.length > 1 && tab != AppTab.server; final child = ListTile( leading: tab.navDestination.icon, title: Text(tab.navDestination.label), @@ -77,7 +77,7 @@ class _HomeTabsConfigPageState extends ConsumerState { icon: const Icon(Icons.delete), onPressed: canRemove ? () => _removeTab(tab) : null, color: canRemove ? null : Theme.of(context).disabledColor, - tooltip: canRemove ? libL10n.delete : l10n.atLeastOneTab, + tooltip: canRemove ? libL10n.delete : (tab == AppTab.server ? l10n.serverTabRequired : l10n.atLeastOneTab), ) : IconButton(icon: const Icon(Icons.add), onPressed: () => _addTab(tab)), onTap: isSelected && canRemove ? () => _removeTab(tab) : null, @@ -111,6 +111,10 @@ class _HomeTabsConfigPageState extends ConsumerState { context.showSnackBar(l10n.atLeastOneTab); return; } + if (tab == AppTab.server) { + context.showSnackBar(l10n.serverTabRequired); + return; + } setState(() { _selectedTabs.remove(tab); });