Andy Himberger
02/28/2023, 7:06 AMAndy Himberger
02/28/2023, 7:12 AMinternal object EmptyPainter : Painter() {
override val intrinsicSize: Size get() = Size.Unspecified
override fun DrawScope.onDraw() {}
}
@Composable
fun rememberMyPainter(): Painter? {
val context = LocalContext.current
val painter = remember { mutableStateOf<Painter?>(null) }
if (painter.value == null) {
DisposableEffect(Unit) {
val bitmap = BitmapFactory.decodeResource(context.resources, R.drawable.num1)
painter.value = BitmapPainter(image = bitmap.asImageBitmap())
onDispose {}
}
}
return painter.value
}
@Composable
fun TestDelayedPainter() {
val painter = rememberMyPainter()
Image(
painter = painter ?: EmptyPainter,
contentDescription = null,
)
}
In the real code inside that DisposableEffect its actually calling something that will run later once a download completes, so we're in a coroutine scope / runnable when the write to state happens, but in creating a test app I found it didn't need to even go that far it just had to do the write from a side effect.Andy Himberger
03/01/2023, 5:14 AM