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.Column
|
||||||
import androidx.compose.foundation.layout.fillMaxSize
|
import androidx.compose.foundation.layout.fillMaxSize
|
||||||
import androidx.compose.foundation.layout.fillMaxWidth
|
import androidx.compose.foundation.layout.fillMaxWidth
|
||||||
import androidx.compose.foundation.layout.navigationBarsPadding
|
|
||||||
import androidx.compose.foundation.layout.padding
|
import androidx.compose.foundation.layout.padding
|
||||||
import androidx.compose.foundation.layout.statusBarsPadding
|
import androidx.compose.foundation.layout.statusBarsPadding
|
||||||
import androidx.compose.material3.ExperimentalMaterial3Api
|
import androidx.compose.material3.ExperimentalMaterial3Api
|
||||||
@@ -19,6 +18,7 @@ import androidx.compose.runtime.getValue
|
|||||||
import androidx.compose.runtime.mutableStateOf
|
import androidx.compose.runtime.mutableStateOf
|
||||||
import androidx.compose.runtime.remember
|
import androidx.compose.runtime.remember
|
||||||
import androidx.compose.runtime.saveable.rememberSaveable
|
import androidx.compose.runtime.saveable.rememberSaveable
|
||||||
|
import androidx.compose.runtime.saveable.rememberSaveableStateHolder
|
||||||
import androidx.compose.runtime.setValue
|
import androidx.compose.runtime.setValue
|
||||||
import androidx.compose.ui.Alignment
|
import androidx.compose.ui.Alignment
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
@@ -56,6 +56,7 @@ fun MainAppShell(
|
|||||||
) {
|
) {
|
||||||
var activeTab by rememberSaveable { mutableStateOf(initialTab) }
|
var activeTab by rememberSaveable { mutableStateOf(initialTab) }
|
||||||
var showAccountSheet by remember { mutableStateOf(false) }
|
var showAccountSheet by remember { mutableStateOf(false) }
|
||||||
|
val tabStateHolder = rememberSaveableStateHolder()
|
||||||
|
|
||||||
Scaffold(
|
Scaffold(
|
||||||
modifier = modifier.fillMaxSize(),
|
modifier = modifier.fillMaxSize(),
|
||||||
@@ -77,9 +78,7 @@ fun MainAppShell(
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
bottomBar = {
|
bottomBar = {
|
||||||
ABoxNavigationBar(
|
ABoxNavigationBar {
|
||||||
modifier = Modifier.navigationBarsPadding(),
|
|
||||||
) {
|
|
||||||
MainTab.values().forEach { tab ->
|
MainTab.values().forEach { tab ->
|
||||||
val isSelected = (tab == activeTab)
|
val isSelected = (tab == activeTab)
|
||||||
ABoxNavigationBarItem(
|
ABoxNavigationBarItem(
|
||||||
@@ -111,10 +110,12 @@ fun MainAppShell(
|
|||||||
targetState = activeTab,
|
targetState = activeTab,
|
||||||
label = "MainTabCrossfade",
|
label = "MainTabCrossfade",
|
||||||
) { tab ->
|
) { tab ->
|
||||||
when (tab) {
|
tabStateHolder.SaveableStateProvider(tab) {
|
||||||
MainTab.DEVICES -> devicesSlot()
|
when (tab) {
|
||||||
MainTab.SCENES -> scenesSlot()
|
MainTab.DEVICES -> devicesSlot()
|
||||||
MainTab.ACTIVITY -> activitySlot()
|
MainTab.SCENES -> scenesSlot()
|
||||||
|
MainTab.ACTIVITY -> activitySlot()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user