Skip to content

Instantly share code, notes, and snippets.

View MessiasLima's full-sized avatar
🏠
Working from home

Messias Junior MessiasLima

🏠
Working from home
View GitHub Profile
@MessiasLima
MessiasLima / StoreViewModel.kt
Created March 7, 2022 21:01
StoreViewModelAfter.kt
import androidx.lifecycle.ViewModel
import com.messiaslima.promogamer.domain.Store
import kotlinx.coroutines.FlowPreview
import kotlinx.coroutines.flow.catch
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.onStart
@FlowPreview
class StoreViewModel(private val storeOrchestrator: StoreOrchestrator) : ViewModel() {
private val retryTrigger = RetryTrigger()
@MessiasLima
MessiasLima / retryableFlow.kt
Created March 7, 2022 20:46
Retryable Flow implementation
import kotlinx.coroutines.FlowPreview
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.filter
import kotlinx.coroutines.flow.flatMapConcat
import kotlinx.coroutines.flow.onEach
@FlowPreview
fun <T> retryableFlow(retryTrigger: RetryTrigger, flowProvider: () -> Flow<T>) =
retryTrigger.retryEvent.filter { it == RetryTrigger.State.RETRYING }
@MessiasLima
MessiasLima / SampleComposable.kt
Created March 7, 2022 20:32
Sample composable
@Composable
fun SampleComposable(viewModel: StoreViewModel = viewModel()){
val uiState by viewModel.uiState.collectAsState(initial = UiState.Idle)
// Some nice composables here
}
@MessiasLima
MessiasLima / SplashViewModelBefore.kt
Last active March 7, 2022 20:30
SplashViewModelBefore
import androidx.lifecycle.ViewModel
import com.messiaslima.promogamer.domain.Store
import kotlinx.coroutines.flow.catch
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.onStart
class StoreViewModel(private val storeOrchestrator: StoreOrchestrator) : ViewModel() {
val uiState = storeOrchestrator.getStores()
.map<List<Store>, UiState> { UiState.Success(it) }