diff --git a/app/src/main/java/com/hippo/ehviewer/ui/main/GalleryInfo.kt b/app/src/main/java/com/hippo/ehviewer/ui/main/GalleryInfo.kt index 2115539b4..e9e203a4b 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/main/GalleryInfo.kt +++ b/app/src/main/java/com/hippo/ehviewer/ui/main/GalleryInfo.kt @@ -34,6 +34,7 @@ import com.hippo.ehviewer.client.EhUtils import com.hippo.ehviewer.client.data.GalleryInfo import com.hippo.ehviewer.download.DownloadManager import com.hippo.ehviewer.ui.tools.CrystalCard +import com.hippo.ehviewer.ui.tools.Deferred import com.hippo.ehviewer.ui.tools.ElevatedCard import com.hippo.ehviewer.ui.tools.GalleryListCardRating @@ -109,12 +110,14 @@ fun GalleryInfoListItem( bottom.linkTo(if (showFav) favRef.top else postedRef.top) }, ) { - if (DownloadManager.containDownloadInfo(info.gid)) { - Icon( - Icons.Default.Download, - contentDescription = null, - modifier = Modifier.size(16.dp), - ) + Deferred({ DownloadManager.containDownloadInfo(info.gid) }) { + if (it) { + Icon( + Icons.Default.Download, + contentDescription = null, + modifier = Modifier.size(16.dp), + ) + } } Text(text = info.simpleLanguage.orEmpty()) if (info.pages != 0 && showPages) { diff --git a/app/src/main/java/com/hippo/ehviewer/ui/tools/DeferedComposable.kt b/app/src/main/java/com/hippo/ehviewer/ui/tools/DeferedComposable.kt index 53c8e1be4..57708d8ed 100644 --- a/app/src/main/java/com/hippo/ehviewer/ui/tools/DeferedComposable.kt +++ b/app/src/main/java/com/hippo/ehviewer/ui/tools/DeferedComposable.kt @@ -4,15 +4,15 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf -import androidx.compose.runtime.saveable.rememberSaveable +import androidx.compose.runtime.remember import androidx.compose.runtime.setValue +import eu.kanade.tachiyomi.util.lang.withIOContext @Composable -fun Deferred(block: suspend () -> Unit, content: @Composable () -> Unit) { - var completed by rememberSaveable { mutableStateOf(false) } +fun Deferred(block: suspend () -> T, content: @Composable (T) -> Unit) { + var completed by remember { mutableStateOf(null) } LaunchedEffect(key1 = Unit) { - block() - completed = true + completed = withIOContext { block() } } - if (completed) content() + completed?.let { content(it) } }