Skip to content

Commit 9632f9e

Browse files
committed
prevent status media change after media is loaded
1 parent a0b1639 commit 9632f9e

File tree

1 file changed

+20
-5
lines changed

1 file changed

+20
-5
lines changed

app/src/main/java/dev/dimension/flare/ui/screen/media/StatusMediaScreen.kt

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -87,14 +87,16 @@ import dev.dimension.flare.ui.humanizer.humanize
8787
import dev.dimension.flare.ui.model.UiMedia
8888
import dev.dimension.flare.ui.model.UiState
8989
import dev.dimension.flare.ui.model.UiTimeline
90-
import dev.dimension.flare.ui.model.map
90+
import dev.dimension.flare.ui.model.isSuccess
9191
import dev.dimension.flare.ui.model.onLoading
9292
import dev.dimension.flare.ui.model.onSuccess
9393
import dev.dimension.flare.ui.presenter.invoke
9494
import dev.dimension.flare.ui.presenter.status.StatusPresenter
9595
import dev.dimension.flare.ui.theme.FlareTheme
9696
import dev.dimension.flare.ui.theme.screenHorizontalPadding
9797
import io.github.fornewid.placeholder.material3.placeholder
98+
import kotlin.time.Duration.Companion.milliseconds
99+
import kotlinx.collections.immutable.ImmutableList
98100
import kotlinx.collections.immutable.toImmutableList
99101
import kotlinx.coroutines.CoroutineScope
100102
import kotlinx.coroutines.Dispatchers
@@ -112,7 +114,6 @@ import moe.tlaster.precompose.molecule.producePresenter
112114
import moe.tlaster.swiper.Swiper
113115
import moe.tlaster.swiper.rememberSwiperState
114116
import org.koin.compose.koinInject
115-
import kotlin.time.Duration.Companion.milliseconds
116117

117118
@OptIn(
118119
ExperimentalMaterial3Api::class,
@@ -674,10 +675,24 @@ private fun statusMediaPresenter(
674675
remember(statusKey) {
675676
StatusPresenter(accountType = accountType, statusKey = statusKey)
676677
}.invoke()
677-
val medias =
678-
state.status.map {
679-
(it.content as? UiTimeline.ItemContent.Status)?.images.orEmpty().toImmutableList()
678+
var medias: UiState<ImmutableList<UiMedia>> by remember {
679+
mutableStateOf(UiState.Loading())
680+
}
681+
// prevent media change when medias is loaded
682+
if (!medias.isSuccess) {
683+
LaunchedEffect(state) {
684+
state.status
685+
.onSuccess {
686+
medias =
687+
UiState.Success(
688+
(it.content as? UiTimeline.ItemContent.Status)
689+
?.images
690+
.orEmpty()
691+
.toImmutableList(),
692+
)
693+
}
680694
}
695+
}
681696
var currentPage by remember {
682697
mutableIntStateOf(initialIndex)
683698
}

0 commit comments

Comments
 (0)