Daniele B
03/21/2021, 1:42 PMScreenState
and a function like emptyScreen()
data class AppState (
val masterState : ScreenState<MasterData> = ScreenState<MasterData>(),
val detailState : ScreenState<DetailData> = emptyScreen(),
)
data class MasterData (
val countriesList : List<CountriesListItem> = emptyList(),
...
)
data class DetailData (
val countryInfo : CountryInfo = CountryInfo(),
...
)
I was trying to follow the Kotlin definitions of List
and emptyList()
but I got stuck
it should be something similar to this?
public interface ScreenState<screenData T> {
val isLoading: Boolean = false,
val screenData: T? = null,
}
public fun <T> emptyScreen(): ScreenState <T> = EmptyScreen
internal object EmptyScreen : ScreenState <Nothing> {
}
Youssef Shoaib [MOD]
03/21/2021, 3:00 PMout
variance on T so that the Nothing
thing actually works. Your code should end up being this:
public interface ScreenState<out T> {
val isLoading: Boolean = false,
val screenData: T? = null,
}
public fun <T> emptyScreen(): ScreenState <T> = EmptyScreen
internal object EmptyScreen : ScreenState <Nothing> {
}
Daniele B
03/21/2021, 3:10 PMabstract class ScreenState<T>(
val isLoading: Boolean = false,
val screenData: T? = null,
)
fun <T> emptyScreen(): ScreenState<T> {
return object : ScreenState<T>() {}
}
Youssef Shoaib [MOD]
03/21/2021, 3:18 PMpublic interface ScreenState<out T> {
val isLoading: Boolean get() = false,
val screenData: T? get() = null,
}
public fun <T> emptyScreen(): ScreenState <T> = EmptyScreen
internal object EmptyScreen : ScreenState <Nothing> {
}
It's basically just default getters which can then be overridden depending on what the subclass wantsDaniele B
03/21/2021, 3:58 PM