为什么 toPx() 不能在 Jetpack Compose 的 Canvas 之外工作?

Ely*_*lye 4 android android-jetpack-compose

在下面的代码中,toPx()可以在 中工作Canvas,但不能在Surface.
为什么?

Canvas(modifier = Modifier.size(16.dp)) {
    val textPaint = Paint().asFrameworkPaint().apply {
        textSize = 32.dp.toPx()
    }
}

Surface(modifier = Modifier.size(16.dp)) {
    val textPaint = Paint().asFrameworkPaint().apply {
        textSize = 32.dp.toPx() // Error `toPx()`
    }
}    
Run Code Online (Sandbox Code Playgroud)

Gab*_*tti 9

toPx()函数是在Density接口内定义的,除非您提供它,否则无法使用它。与提供它的Canvasa 一起工作。DrawScope

要使用它,您可以提供Density使用LocalDensity提供者。
就像是:

val dpToPx = with(LocalDensity.current) { 32.dp.toPx() }
Run Code Online (Sandbox Code Playgroud)