mirror of
				https://github.com/mihonapp/mihon.git
				synced 2025-11-04 08:08:55 +01:00 
			
		
		
		
	Alternate method of avoiding LazyColumn key conflict crashes
Co-authored-by: ivaniskandar <ivaniskandar@users.noreply.github.com>
This commit is contained in:
		@@ -118,10 +118,9 @@ fun LazyListScope.updatesUiItems(
 | 
			
		||||
            }
 | 
			
		||||
            is UpdatesUiModel.Item -> {
 | 
			
		||||
                val updatesItem = item.item
 | 
			
		||||
                val update = updatesItem.update
 | 
			
		||||
                UpdatesUiItem(
 | 
			
		||||
                    modifier = Modifier.animateItemPlacement(),
 | 
			
		||||
                    update = update,
 | 
			
		||||
                    update = updatesItem.update,
 | 
			
		||||
                    selected = updatesItem.selected,
 | 
			
		||||
                    onLongClick = {
 | 
			
		||||
                        onUpdateSelected(updatesItem, !updatesItem.selected, true, true)
 | 
			
		||||
 
 | 
			
		||||
@@ -20,9 +20,9 @@ import kotlinx.coroutines.flow.StateFlow
 | 
			
		||||
import kotlinx.coroutines.flow.asStateFlow
 | 
			
		||||
import kotlinx.coroutines.flow.collectLatest
 | 
			
		||||
import kotlinx.coroutines.flow.combine
 | 
			
		||||
import kotlinx.coroutines.flow.debounce
 | 
			
		||||
import kotlinx.coroutines.flow.launchIn
 | 
			
		||||
import kotlinx.coroutines.flow.onEach
 | 
			
		||||
import kotlinx.coroutines.flow.stateIn
 | 
			
		||||
import kotlinx.coroutines.flow.update
 | 
			
		||||
import rx.Observable
 | 
			
		||||
import uy.kohesive.injekt.Injekt
 | 
			
		||||
@@ -116,7 +116,7 @@ class ExtensionsPresenter(
 | 
			
		||||
 | 
			
		||||
                items
 | 
			
		||||
            }
 | 
			
		||||
                .debounce(500) // Avoid crashes due to LazyColumn rendering
 | 
			
		||||
                .stateIn(presenterScope)
 | 
			
		||||
                .collectLatest {
 | 
			
		||||
                    state.isLoading = false
 | 
			
		||||
                    state.items = it
 | 
			
		||||
 
 | 
			
		||||
@@ -16,8 +16,8 @@ import kotlinx.coroutines.CoroutineScope
 | 
			
		||||
import kotlinx.coroutines.channels.Channel
 | 
			
		||||
import kotlinx.coroutines.flow.catch
 | 
			
		||||
import kotlinx.coroutines.flow.collectLatest
 | 
			
		||||
import kotlinx.coroutines.flow.debounce
 | 
			
		||||
import kotlinx.coroutines.flow.receiveAsFlow
 | 
			
		||||
import kotlinx.coroutines.flow.stateIn
 | 
			
		||||
import logcat.LogPriority
 | 
			
		||||
import uy.kohesive.injekt.Injekt
 | 
			
		||||
import uy.kohesive.injekt.api.get
 | 
			
		||||
@@ -39,11 +39,11 @@ class SourcesPresenter(
 | 
			
		||||
    fun onCreate() {
 | 
			
		||||
        presenterScope.launchIO {
 | 
			
		||||
            getEnabledSources.subscribe()
 | 
			
		||||
                .debounce(500) // Avoid crashes due to LazyColumn rendering
 | 
			
		||||
                .catch { exception ->
 | 
			
		||||
                    logcat(LogPriority.ERROR, exception)
 | 
			
		||||
                    _events.send(Event.FailedFetchingSources)
 | 
			
		||||
                }
 | 
			
		||||
                .stateIn(presenterScope)
 | 
			
		||||
                .collectLatest(::collectLatestSources)
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -33,9 +33,9 @@ import kotlinx.coroutines.flow.Flow
 | 
			
		||||
import kotlinx.coroutines.flow.catch
 | 
			
		||||
import kotlinx.coroutines.flow.collectLatest
 | 
			
		||||
import kotlinx.coroutines.flow.combine
 | 
			
		||||
import kotlinx.coroutines.flow.debounce
 | 
			
		||||
import kotlinx.coroutines.flow.distinctUntilChanged
 | 
			
		||||
import kotlinx.coroutines.flow.receiveAsFlow
 | 
			
		||||
import kotlinx.coroutines.flow.stateIn
 | 
			
		||||
import kotlinx.coroutines.launch
 | 
			
		||||
import logcat.LogPriority
 | 
			
		||||
import uy.kohesive.injekt.Injekt
 | 
			
		||||
@@ -87,11 +87,11 @@ class UpdatesPresenter(
 | 
			
		||||
                getUpdates.subscribe(calendar).distinctUntilChanged(),
 | 
			
		||||
                downloadCache.changes,
 | 
			
		||||
            ) { updates, _ -> updates }
 | 
			
		||||
                .debounce(500) // Avoid crashes due to LazyColumn rendering
 | 
			
		||||
                .catch {
 | 
			
		||||
                    logcat(LogPriority.ERROR, it)
 | 
			
		||||
                    _events.send(Event.InternalError)
 | 
			
		||||
                }
 | 
			
		||||
                .stateIn(presenterScope)
 | 
			
		||||
                .collectLatest { updates ->
 | 
			
		||||
                    state.items = updates.toUpdateItems()
 | 
			
		||||
                    state.isLoading = false
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user