无法从记忆块中调用@Composable函数



我想在一个函数中计算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中可组合函数和普通函数有什么不同?

相关内容

  • 没有找到相关文章

最新更新