Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Reload Coil Image Jetpack Compose

I need to reload/refresh the coil image because it has been rewritten to disk/storage The code I am using

val context = LocalContext.current
    val loader = if (!isSvg) {
        LocalImageLoader.current ?: remember { ImageLoader(context) }
    } else {
        remember {
            ImageLoader.Builder(context)
                .componentRegistry {
                    add(SvgDecoder(context))
                }.build()
        }
    }

   val painter = rememberCoilPainter(request = request, imageLoader = loader)


    LaunchedEffect(key1 = invalidate, block = {
        val result = loader.execute(
            ImageRequest.Builder(context)
                .diskCachePolicy(if (fromCache) CachePolicy.ENABLED else CachePolicy.DISABLED)
                .data(request).build()
        )
        Log.d("TL_ImageLoadRes", result.toString())
    })

    Box(modifier = Modifier.background(MaterialTheme.colors.onBackground.copy(.4f))) {
        Image(
            modifier = modifier,
            painter = painter,
            contentDescription = stringResource(R.string.random_image),
            contentScale = contentScale
        )
    }

Every time invalidate changes , it means the image has been rewritten and now may be found and I execute the LaunchedEffect but after getting the success result I don't know where to put it , it contains a Drawable , I don't know what to do with it

like image 549
Waqas Tahir Avatar asked Oct 19 '25 08:10

Waqas Tahir


1 Answers

Inside LaunchedEffect block, add below lines to refresh the painter

painter.onForgotten()
painter.onRemembered()
like image 105
Krish4906 Avatar answered Oct 20 '25 22:10

Krish4906