#CompositionLocal(局部变量)
- 广义上来说,CompositionLocal是一种能够让局部变量穿透在Composition的代码作用域范围,能够进行共享的API。
- 这样能够让整个Compose内部的代码编写,变得更简洁。
##使用案例
- 在顶层File中:
###LocalForTest.kt
import androidx.compose.runtime.compositionLocalOf
val LocalName = compositionLocalOf<String> { error("nothing setup.") }
val LocalTel = compositionLocalOf<Long> { error("nothing setup.") }
###使用CompositionLocal
- 通过定义好的顶层CompositionLocal数据,我们可以在Compose函数中,随意穿透层级,调用这些变量。
setContent{
CompositionLocalProvider(LocalName provides "test", LocalTel provides 13552305100) {
Column {
Modifier
.background(Color.White)
.height(IntrinsicSize.Max)
Box(modifier = Modifier.size(100.dp, 100.dp))
Text(
LocalName.current,//随时访问名称
Modifier
.background(
Color(0x1A1E293D),
RoundedCornerShape(20.dp)
)
.padding(90.dp, 40.dp),
fontSize = 36.sp,
color = Color(0xCC1E293D),
textAlign = TextAlign.Center,
)
Text(
LocalTel.current.toString(),//随时访问电话
Modifier
.background(
Color(0x1A1E293D),
RoundedCornerShape(20.dp)
)
.padding(90.dp, 40.dp),
fontSize = 36.sp,
color = Color(0xCC1E293D),
textAlign = TextAlign.Center,
)
}
}
}
应用
- 最直接的应用,就是简化了函数传参的层级和繁琐性(相当于不需要手动传参)。
2.能够快速提供上下文相关的数据(主题、Compose基础API中的LocalContext.current就是快速提供一个页面级别的context,可以在Compose函数中随意调用)