Pablo
12/13/2024, 10:10 PMsealed interface MyModelUiState {
object Loading : MyModelUiState
data class Error(val throwable: Throwable) : MyModelUiState
data class Success(val data: List<String>) : MyModelUiState
}
checking compose samples I can see that they don't use this patter when they need to add more content, instead, they do this:
data class ReplyHomeUIState(
val emails: List<Email> = emptyList(),
val selectedEmails: Set<Long> = emptySet(),
val openedEmail: Email? = null,
val isDetailOnlyOpen: Boolean = false,
val loading: Boolean = false,
val error: String? = null
)
How to modify MyModelUiState to for example add a dialogOnScreen variable and a dialog text variable? Should these variables be inside "Success" data class as parameters? or should I stop using the sealed interface pattern and do the other style I showed in the second sample?Pablichjenkov
12/13/2024, 10:35 PMsealed class DialogState {
class Present(dialogData: DialogData):DialogState
object Empty: DialogState// when no dialog
}
Pablichjenkov
12/13/2024, 10:43 PMPablo
12/13/2024, 10:50 PMPablo
12/13/2024, 10:51 PMsealed interface BusStopsDBScreenUiState {
object Loading : BusStopsDBScreenUiState
data class Error(val throwable: Throwable) : BusStopsDBScreenUiState
data class Success(
val data: List<BusStop>,
val dialogText: StringResource?
) : BusStopsDBScreenUiState
}
Pablo
12/13/2024, 10:51 PMPablo
12/13/2024, 10:51 PMPablichjenkov
12/13/2024, 10:58 PMPablichjenkov
12/13/2024, 11:00 PMPablo
12/13/2024, 11:01 PMval uiState: StateFlow<BusStopsDBScreenUiState> = busDataRepository.getBusStops()
.map<List<BusStop>, BusStopsDBScreenUiState> { busStops ->
BusStopsDBScreenUiState.Success(busStops, Res.string.bus_stops_db_filled)
}
.catch { throwable ->
emit(BusStopsDBScreenUiState.Error(throwable))
}.stateIn(viewModelScope, SharingStarted.WhileSubscribed(5000), BusStopsDBScreenUiState.Loading)
fun updateBusStops() {
viewModelScope.launch(Dispatchers.Main) {
launch(<http://Dispatchers.IO|Dispatchers.IO>) {
busDataRepository.updateBusStops()
}
}
}
Pablo
12/13/2024, 11:02 PMPablo
12/13/2024, 11:03 PMPablo
12/13/2024, 11:04 PMPablichjenkov
12/13/2024, 11:14 PMPablichjenkov
12/13/2024, 11:15 PMPablo
12/13/2024, 11:15 PMPablo
12/13/2024, 11:16 PMPablo
12/13/2024, 11:16 PMPablichjenkov
12/13/2024, 11:57 PMprivate val _uiStateFlow: MutableStateFlow<UiState> = createInitialMutableStateFlow()
val uiStateFlow: = _uiStateFlow.asState()
fun updateUiState {
_uiStateFlow.update {
it.copy(propertyXYZ = newValu)
}
}
I am on the phone so probably some error but that's the general ideaPablo
12/13/2024, 11:59 PMType mismatch.
Required:
MutableStateFlow<BusStopsDBScreenUiState>
Found:
StateFlow<BusStopsDBScreenUiState>
Pablo
12/14/2024, 12:01 AMPablichjenkov
12/14/2024, 12:03 AMPablichjenkov
12/14/2024, 12:04 AMPablo
12/14/2024, 12:06 AMdorche
12/14/2024, 12:16 AM