Abd*_*ؤمن 6 android android-jetpack-compose
我现在使用 Compose 将参数传递给函数,但我觉得,随着每个新数据沿着树传递,这些参数会变得越来越长。
我想知道是否有一种方法可以将值传递给树上的其他可组合项。
除了使用可组合项的函数参数(推荐的方式)之外,您还可以使用CompositionLocal: 对于不被视为树范围或子层次结构范围的概念,避免 CompositionLocal 。
首先,定义全局变量compositionLocalOf (例如,在LocalCompositions.kt中):
import androidx.compose.runtime.compositionLocalOf
data class Post(val title: String)
val LocalPost = compositionLocalOf { Post(title = "Ahmed") }
Run Code Online (Sandbox Code Playgroud)
然后在@Compose函数内定义它以供树下的其他可组合项使用:
import androidx.compose.runtime.compositionLocalOf
data class Post(val title: String)
val LocalPost = compositionLocalOf { Post(title = "Ahmed") }
Run Code Online (Sandbox Code Playgroud)
现在,检索 a 内的值@Composable:
// composable down the nodes tree
@Composable
fun PostContentView() {
...
val post = LocalPost.current
...
}
Run Code Online (Sandbox Code Playgroud)
如果您想实现上述解决方案,但要监视变量的更改并相应地更新可组合项(节点),则可以使用MutableState变量。
重新定义前面的例子:
LocalCompositions.kt:
import androidx.compose.runtime.compositionLocalOf
import androidx.compose.runtime.compositionLocalOf
import androidx.compose.runtime.mutableStateOf
data class Post(val title: MutableState<String> = mutableStateOf(""))
val LocalPost = compositionLocalOf { Post(title = mutableStateOf("Ahmed")) }
Run Code Online (Sandbox Code Playgroud)
然后在@Compose函数内定义它以供树下的其他可组合项使用:
@Composable
fun MainView() {
...
val post = Post(title = "Shamil")
CompositionLocalProvider(LocalPost provides post) {
PostContentView()
}
...
}
Run Code Online (Sandbox Code Playgroud)
现在,检索 a 内的值@Composable:
// composable down the nodes tree
@Composable
fun PostContentView() {
...
val post = LocalPost.current
...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8368 次 |
| 最近记录: |