在Compose中使用TabRow时,tabPositions在哪里实例化



代码A是funTabRow的源代码。

有一个名为indicator的参数需要在调用时传递,Android提供了一个默认的实现@Composable { tabPositions -> TabRowDefaults.Indicator( Modifier.tabIndicatorOffset(tabPositions[selectedTabIndex])) }

但我不知道参数tabPositions在哪里实例化,你能告诉我吗?

代码A

@Composable
fun TabRow(
selectedTabIndex: Int,
modifier: Modifier = Modifier,
backgroundColor: Color = MaterialTheme.colors.primarySurface,
contentColor: Color = contentColorFor(backgroundColor),
indicator: @Composable (tabPositions: List<TabPosition>) -> Unit = @Composable { tabPositions ->
TabRowDefaults.Indicator(
Modifier.tabIndicatorOffset(tabPositions[selectedTabIndex])
)
},
divider: @Composable () -> Unit = @Composable {
TabRowDefaults.Divider()
},
tabs: @Composable () -> Unit
) {
Surface(
modifier = modifier.selectableGroup(),
color = backgroundColor,
contentColor = contentColor
) {
...
}
}

indicator参数是您提供的lambda,TabRow后面的代码将调用它并传入tabPositions。只需搜索indicator(:的源代码

TabRow

你会发现它在这里被称为:

subcompose(TabSlots.Indicator) {
indicator(tabPositions)
}.fastForEach {
it.measure(Constraints.fixed(tabRowWidth, tabRowHeight)).placeRelative(0, 0)
}

最新更新