From de9e9b21c25c8ba5d8b02ff869c6a87ffde2639b Mon Sep 17 00:00:00 2001 From: HapeLee <1321903405@qq.com> Date: Sun, 30 Nov 2025 03:18:33 +0800 Subject: [PATCH] =?UTF-8?q?[=E6=96=B0=E5=A2=9E]=20=E8=AE=A9Compose?= =?UTF-8?q?=E7=9A=84=E5=B0=81=E9=9D=A2=E7=BB=84=E4=BB=B6=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E6=9B=B4=E5=A4=9A=E5=8F=82=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../legado/app/ui/widget/components/Cover.kt | 32 ++++++++++++++----- 1 file changed, 24 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/io/legado/app/ui/widget/components/Cover.kt b/app/src/main/java/io/legado/app/ui/widget/components/Cover.kt index e237ecffa..7e36b20e6 100644 --- a/app/src/main/java/io/legado/app/ui/widget/components/Cover.kt +++ b/app/src/main/java/io/legado/app/ui/widget/components/Cover.kt @@ -32,13 +32,16 @@ private val DefaultCoverModifier = Modifier @Composable fun Cover( - path: String?, + path: Any?, modifier: Modifier = DefaultCoverModifier, - badgeContent: (@Composable RowScope.() -> Unit)? = null + badgeContent: (@Composable RowScope.() -> Unit)? = null, + loadOnlyWifi: Boolean = false, + sourceOrigin: String? = null, + onLoadFinish: (() -> Unit)? = null ) { - Box( - modifier = modifier - ) { + val context = LocalContext.current + + Box(modifier = modifier) { Box( modifier = Modifier .fillMaxSize() @@ -47,12 +50,25 @@ fun Cover( contentAlignment = Alignment.Center ) { if (path == null) { - Icon(Icons.Default.Book, null, tint = MaterialTheme.colorScheme.surfaceContainerHighest, modifier = Modifier.size(24.dp)) + Icon( + Icons.Default.Book, + contentDescription = null, + tint = MaterialTheme.colorScheme.surfaceContainerHighest, + modifier = Modifier.size(24.dp) + ) } else { AsyncImage( - model = ImageRequest.Builder(LocalContext.current) - .data(path) + model = ImageRequest.Builder(context) + .data(path) // 可以是 URL、File、Uri、DrawableRes .crossfade(true) + .apply { + if (sourceOrigin != null) setParameter("sourceOrigin", sourceOrigin) + if (loadOnlyWifi) setParameter("loadOnlyWifi", true) + } + .listener( + onSuccess = { _, _ -> onLoadFinish?.invoke() }, + onError = { _, _ -> onLoadFinish?.invoke() } + ) .build(), contentDescription = null, contentScale = ContentScale.Crop,