代码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)
}