我想在一个函数中计算Box的高度,我想要组合记住它的结果,而不是再次调用该函数。该函数具有一些可组合的内容,因此它是@Composable
函数。
问题是,Compose不允许我从remember
块调用这个函数。
这是我的代码:
val coverImageHeightInDp = remember {
viewModel.calculateTopCoverHeightInDp()
}
Box(modifier = Modifier
.then(modifier)
.fillMaxWidth()
.height(coverImageHeightInDp)
)
和viewModel
中的函数:
@Composable
fun calculateTopCoverHeightInDp(): Dp {
val originalImageDimens = Size(1440f, 828f)
val imageRatio = originalImageDimens.width / originalImageDimens.height
val configuration = LocalConfiguration.current
val screenWidthInDp = configuration.screenWidthDp.dp
return screenWidthInDp / imageRatio
}
我该如何编码它的方式,这个函数的结果被记住,这个函数不被再次调用,直到屏幕旋转?
谢谢。
当你的计算函数需要@Composable作用域的变量时,你可以直接传递你在组合中得到的变量,比如密度或配置
fun calculateTopCoverHeightInDp(configuration: Configuration): Dp {
val originalImageDimens = Size(1440f, 828f)
val imageRatio = originalImageDimens.width / originalImageDimens.height
val screenWidthInDp = configuration.screenWidthDp.dp
return screenWidthInDp / imageRatio
}
使用
val configuration: Configuration = LocalConfiguration.current
val calculatedHeight = remember(configuration){
calculateTopCoverHeightInDp(configuration)
}
你也可以查看可组合函数和不可组合函数的区别。
Android中可组合函数和普通函数有什么不同?