From 6dab84506edeb6b161825cee3b52a62f0f5b39a8 Mon Sep 17 00:00:00 2001 From: KremeCN <3265494849@qq.com> Date: Tue, 25 Aug 2026 10:40:35 +0800 Subject: [PATCH] fix(app): preserve tab slot state and remove duplicate bottom insets - Wrap tab crossfade slots in SaveableStateHolder to preserve slot-local state across tab switches - Remove redundant navigationBarsPadding modifier on ABoxNavigationBar to prevent duplicated bottom spacing --- .../abox/manager/ui/shell/MainAppShell.kt | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/android/app/src/main/kotlin/com/flagship/abox/manager/ui/shell/MainAppShell.kt b/android/app/src/main/kotlin/com/flagship/abox/manager/ui/shell/MainAppShell.kt index 6565ef0..6c2c8ce 100644 --- a/android/app/src/main/kotlin/com/flagship/abox/manager/ui/shell/MainAppShell.kt +++ b/android/app/src/main/kotlin/com/flagship/abox/manager/ui/shell/MainAppShell.kt @@ -6,7 +6,6 @@ import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.navigationBarsPadding import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.statusBarsPadding import androidx.compose.material3.ExperimentalMaterial3Api @@ -19,6 +18,7 @@ import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.saveable.rememberSaveable +import androidx.compose.runtime.saveable.rememberSaveableStateHolder import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier @@ -56,6 +56,7 @@ fun MainAppShell( ) { var activeTab by rememberSaveable { mutableStateOf(initialTab) } var showAccountSheet by remember { mutableStateOf(false) } + val tabStateHolder = rememberSaveableStateHolder() Scaffold( modifier = modifier.fillMaxSize(), @@ -77,9 +78,7 @@ fun MainAppShell( } }, bottomBar = { - ABoxNavigationBar( - modifier = Modifier.navigationBarsPadding(), - ) { + ABoxNavigationBar { MainTab.values().forEach { tab -> val isSelected = (tab == activeTab) ABoxNavigationBarItem( @@ -111,10 +110,12 @@ fun MainAppShell( targetState = activeTab, label = "MainTabCrossfade", ) { tab -> - when (tab) { - MainTab.DEVICES -> devicesSlot() - MainTab.SCENES -> scenesSlot() - MainTab.ACTIVITY -> activitySlot() + tabStateHolder.SaveableStateProvider(tab) { + when (tab) { + MainTab.DEVICES -> devicesSlot() + MainTab.SCENES -> scenesSlot() + MainTab.ACTIVITY -> activitySlot() + } } } }