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
This commit is contained in:
@@ -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()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user