Jetpack Compose组合式继承:如何传递innerPadding给子组件?
Jetpack Compose组合式继承中传递innerPadding的解决方案
你需要在子组件的content lambda中接收父组件传递过来的带innerPadding的Modifier,具体修改如下:
原问题代码
父组件:
@Composable fun SectionScreen( section: Section, modifier: Modifier = Modifier, content: @Composable (modifier: Modifier) -> Unit, ) { Scaffold( modifier = modifier, topBar = { Text(text = "Top Section Header -> sectionID: ${section.sectionID}") }, bottomBar = { Text(text = "Top Section Footer -> sectionID: ${section.sectionID}") } ) { innerPadding -> content(Modifier.padding(innerPadding)) } }
子组件:
@Composable fun InfoSectionScreen(section: Section, modifier: Modifier = Modifier) = SectionScreen( section = section, modifier = modifier, ) { Column( modifier = modifier ) { Text(text = "Section Content -> sectionID: ${section.sectionID}") } }
修改后的子组件代码
@Composable fun InfoSectionScreen(section: Section, modifier: Modifier = Modifier) = SectionScreen( section = section, modifier = modifier, ) { contentModifier -> // 接收父组件传递的带innerPadding的Modifier Column( modifier = contentModifier // 应用这个Modifier,替代原参数的modifier ) { Text(text = "Section Content -> sectionID: ${section.sectionID}") } }
说明
父组件中Scaffold会自动计算出避开顶部栏和底部栏的innerPadding,并将包含该padding的Modifier传递给content lambda。子组件只要在lambda中接收这个Modifier,再应用到自身的根布局上,就能让内容自动适配Scaffold的栏位,避免被顶部或底部栏遮挡。
内容的提问来源于stack exchange,提问作者NullPointerException
相关产品推荐
相关产品推荐

