jonathan olds
07/29/2023, 8:03 AMjonathan olds
07/29/2023, 8:03 AM@Composable
fun TabRow2(
) {
var selectedTab by remember { mutableStateOf(0)}
TabRow(
selectedTabIndex = selectedTab,
indicator = { tabPositions ->
if (selectedTab < tabPositions.size) {
TabRowDefaults.SecondaryIndicator(
Modifier.tabIndicatorOffset(tabPositions[selectedTab])
)
}
},
) {
for (i in 0 until 4) {
println("new tab $i")
Tab(
selected = selectedTab == i,
onClick = { selectedTab = i },
text = { Text(i.toString()) }
)
}
}
}
I would have expected that to only recompose the indicator or maybe the two tabs affected by the change, no?Peter Mandeljc
07/29/2023, 4:18 PMfor
loop, you should consider using key()
for (i in 0 until 4) {
val isSelected = i == selectedTab
key(i, isSelected) {
Tab(selected = isSelected, ...)
}
}
jonathan olds
07/30/2023, 3:41 AMjonathan olds
07/30/2023, 3:43 AMPeter Mandeljc
07/30/2023, 10:59 AMPeter Mandeljc
07/30/2023, 10:59 AMjonathan olds
07/30/2023, 11:12 AMjonathan olds
07/30/2023, 11:13 AM@Composable
fun TabRow2() {
var selectedTab by remember { mutableStateOf(0)}
TabRow(
selectedTabIndex = selectedTab,
indicator = { tabPositions ->
if (selectedTab < tabPositions.size) {
TabRowDefaults.SecondaryIndicator(
Modifier.tabIndicatorOffset(tabPositions[selectedTab])
)
}
},
) {
for (i in 0 until 4) {
val isSelected = i == selectedTab
key(i, isSelected) {
println("new tab $i")
Tab(
selected = selectedTab == i,
onClick = { selectedTab = i },
text = { Text(i.toString()) }
)
}
}
}
}
jonathan olds
07/30/2023, 11:16 AM@Composable
@ComposableInferredTarget
public fun TabRow(
selectedTabIndex: Int,
modifier: Modifier,
containerColor: Color,
contentColor: Color,
indicator: @Composable (List<TabPosition>) -> Unit,
divider: @Composable () -> Unit,
tabs: @Composable () -> Unit
): Unit
jonathan olds
07/30/2023, 11:17 AMjonathan olds
07/30/2023, 11:19 AM