qdsfdhvh/compose-imageloader

ImageLoader httpClient

Closed this issue · 2 comments

Hi

val painter = rememberImagePainter(
                    url = "https://example.com/image",
                    imageLoader = generateImageLoader()
                )
                Image(
                    modifier = Modifier.size(70.dp, 70.dp).clip(CircleShape),
                    painter = painter,
                    contentDescription = null
                )
@Composable
fun generateImageLoader(
    tokenManager: TokenManager = koinInject()
): ImageLoader {
    return ImageLoader {
        components {
            setupDefaultComponents(
                httpClient = {
                    HttpClient{
                        defaultRequest {
                            bearerAuth(tokenManager.getAuthorization)
                        }
                    }
                }
            )
        }
    }
}

Hi
when i set image loader for rememberImagePainter, i got the following error:

io.ktor.client.HttpClient -- REQUEST https://example.com/image failed with exception: java.util.concurrent.CancellationException: The coroutine scope left the composition

how can i fix that?

You need to remember { generateImageLoader() } otherwise it will cause the Imageloader to rebuild on Recompose.

But the bettter way is use CompositionLocalProvider at the outer level of the compose.

setContent {
    CompositionLocalProvider(
        LocalImageLoader provides remember { generateImageLoader() }
    ) {
        // App()
    }
}

I'm close this issue, you can reopen it if still have problem.