With some little tweaks to @Oliver Metz's solution -
@Stable fun Dp.toPx(): Float = this.value * Resources.getSystem().displayMetrics.density
this is a clean way to convert dp to px without needing the function to be a composable, which makes it a little performant and even allows it to be used outside composables.
also, @Sirop4ik's solution has no benefits, 1. Inlining these converters means the same code is gonna be copied to the call site, increasing app size. This is especially noticeable if u use it a lot. 2. Using a getter instead of a function, this makes the usage like this - 120.dp.toPx as opposed to 120.dp.toPx(). Which doesn't look the way how we use the converters like .toInt(), .toString() etc. More importantly these getters are anyway compiled to functions. for example,
val testVariable: Int get() = 1
fun testFunction(): Int = 1
Is compiled to-
public static final int getTestVariable() { return 1; }
public static final int testFunction() { return 1 }
So, this has no difference.