readd: home drawer

Fixes #900
This commit is contained in:
lollipopkit🏳️‍⚧️
2025-09-05 00:12:41 +08:00
parent 1bac986fe0
commit eadd343205
27 changed files with 88 additions and 26 deletions

View File

@@ -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

View File

@@ -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';
}

View File

@@ -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';
}

View File

@@ -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';
}

View File

@@ -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';
}

View File

@@ -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';
}

View File

@@ -876,4 +876,7 @@ class AppLocalizationsJa extends AppLocalizations {
@override
String get atLeastOneTab => '少なくとも1つのタブを選択する必要があります';
@override
String get serverTabRequired => 'サーバータブは削除できません';
}

View File

@@ -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';
}

View File

@@ -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';
}

View File

@@ -908,4 +908,7 @@ class AppLocalizationsRu extends AppLocalizations {
@override
String get atLeastOneTab => 'Должна быть выбрана хотя бы одна вкладка';
@override
String get serverTabRequired => 'Server tab cannot be removed';
}

View File

@@ -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';
}

View File

@@ -909,4 +909,7 @@ class AppLocalizationsUk extends AppLocalizations {
@override
String get atLeastOneTab => 'Потрібно вибрати принаймні одну вкладку';
@override
String get serverTabRequired => 'Server tab cannot be removed';
}

View File

@@ -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 => '服務器標籤不能被移除';
}

View File

@@ -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"
"atLeastOneTab": "Mindestens ein Tab muss ausgewählt sein",
"serverTabRequired": "Server-Tab kann nicht entfernt werden"
}

View File

@@ -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"
}

View File

@@ -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"
"atLeastOneTab": "Al menos una pestaña debe estar seleccionada",
"serverTabRequired": "Server tab cannot be removed"
}

View File

@@ -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é"
"atLeastOneTab": "Au moins un onglet doit être sélectionné",
"serverTabRequired": "Server tab cannot be removed"
}

View File

@@ -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"
"atLeastOneTab": "Setidaknya satu tab harus dipilih",
"serverTabRequired": "Server tab cannot be removed"
}

View File

@@ -281,5 +281,6 @@
"homeTabsCustomizeDesc": "ホームページに表示するタブとその順序をカスタマイズします",
"reset": "リセット",
"availableTabs": "利用可能なタブ",
"atLeastOneTab": "少なくとも1つのタブを選択する必要があります"
"atLeastOneTab": "少なくとも1つのタブを選択する必要があります",
"serverTabRequired": "サーバータブは削除できません"
}

View File

@@ -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"
"atLeastOneTab": "Er moet minimaal één tabblad worden geselecteerd",
"serverTabRequired": "Server tab cannot be removed"
}

View File

@@ -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"
"atLeastOneTab": "Pelo menos uma aba deve ser selecionada",
"serverTabRequired": "Server tab cannot be removed"
}

View File

@@ -281,5 +281,6 @@
"homeTabsCustomizeDesc": "Настройте, какие вкладки появляются на главной странице и их порядок",
"reset": "Сброс",
"availableTabs": "Доступные вкладки",
"atLeastOneTab": "Должна быть выбрана хотя бы одна вкладка"
"atLeastOneTab": "Должна быть выбрана хотя бы одна вкладка",
"serverTabRequired": "Server tab cannot be removed"
}

View File

@@ -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"
"atLeastOneTab": "En az bir sekme seçilmelidir",
"serverTabRequired": "Server tab cannot be removed"
}

View File

@@ -281,5 +281,6 @@
"homeTabsCustomizeDesc": "Налаштуйте, які вкладки відображаються на головній сторінці та їх порядок",
"reset": "Скинути",
"availableTabs": "Доступні вкладки",
"atLeastOneTab": "Потрібно вибрати принаймні одну вкладку"
"atLeastOneTab": "Потрібно вибрати принаймні одну вкладку",
"serverTabRequired": "Server tab cannot be removed"
}

View File

@@ -281,5 +281,6 @@
"homeTabsCustomizeDesc": "自定义主页上显示的标签及其顺序",
"reset": "重置",
"availableTabs": "可用标签",
"atLeastOneTab": "至少需要选择一个标签"
"atLeastOneTab": "至少需要选择一个标签",
"serverTabRequired": "服务器标签不能被移除"
}

View File

@@ -281,5 +281,6 @@
"homeTabsCustomizeDesc": "自訂主頁上顯示的標籤及其順序",
"reset": "重置",
"availableTabs": "可用標籤",
"atLeastOneTab": "至少需要選擇一個標籤"
"atLeastOneTab": "至少需要選擇一個標籤",
"serverTabRequired": "服務器標籤不能被移除"
}

View File

@@ -68,7 +68,7 @@ class _HomeTabsConfigPageState extends ConsumerState<HomeTabsConfigPage> {
}
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<HomeTabsConfigPage> {
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<HomeTabsConfigPage> {
context.showSnackBar(l10n.atLeastOneTab);
return;
}
if (tab == AppTab.server) {
context.showSnackBar(l10n.serverTabRequired);
return;
}
setState(() {
_selectedTabs.remove(tab);
});