Skip to content

Instantly share code, notes, and snippets.

Luca Nicoletti lnicolet

View GitHub Profile
View ViewStateExample.kt
sealed class MyViewState {
class Error(val cause: String): MyViewState()
object Loading: MyViewState()
class DataLoaded(data: Data): MyViewState()
}
[...MyView...]
fun render(viewState: MyViewState) {
when (viewState) {
MyViewState.Error -> { // handle error state
View MyActivityCompose.kt
class MyActivity: Activity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
CraneWrapper {
MyApp()
}
}
}
}
View MVIViewState.kt
sealed class MVIViewState {
object Loading: MVIViewState()
class Error(val reason: String): MVIViewState()
class Success(val result: String): MVIViewState()
}
View MVIViewModel.kt
class MVIViewModel : ViewModel() {
val viewState: MutableLiveData<MVIViewState>()
fun fetchData() {
myDataSource.fetchData()
.doOnSubscribe {
viewState.postValue(MVIViewState.Loading)
}
.observe(
{
View MyActivity.kt
class MyActivity: Activity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setupViewModel()
}
private fun setupViewModel() {
viewModel = //factory fancy way to get the instance of ViewModel
viewModel.viewState.observe(this, Observer {
when (it) {
MVIViewState.Loading -> { // show loading
View buildUI.kt
@Composable
abstract fun buildUI()
View MyAppCompose.kt
@Composable
fun MyApp() {
MaterialTheme { Text("Hello there!") }
}
View MVIJetpackComposeViewModel.kt
class MVIJetpackComposeViewModel : ViewModel() {
private val _jetpackComposeViewState = MutableLiveData<MVIJetpackComposeViewState>()
private val useCase = UseCase()
val jetpackComposeViewState: LiveData<MVIJetpackComposeViewState>
get() = _jetpackComposeViewState
init {
loadData()
}
View MVIJetpackComposeViewState.kt
sealed class MVIJetpackComposeViewState {
@Composable
abstract fun buildUI()
object Loading : MyViewState() {
@Composable
override fun buildUI() {
// Loading which is not provided yet
}
}
View MVIJetpackComposeActivity.kt
class MVIJetpackComposeActivity : AppCompatActivity() {
lateinit var myViewModel: MVIJetpackComposeViewModel
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
myViewModel = // factory to instantiate viewmodel
// just call setContent once
setContent {
CraneWrapper {
You can’t perform that action at this time.