ursus
12/05/2019, 7:12 AMEdgars
12/05/2019, 7:22 AMwhen (state) {
is Loading -> showLoadingState()
is Success -> showSuccessState(state)
is Error -> showErrorState(state)
}
ursus
12/05/2019, 7:29 AMEdgars
12/05/2019, 7:35 AM// assume state is Success
if (state is Success) {
// whatever
some_view.isVisible = true
} else {
some_view.isVisible = false
}
if (state is Error) { // state is not Error
// whatever
} else {
// some_view.isVisible = false
}
As a result, some_view
will be hidden, even though we're in the Success
state and want to show that view.ursus
12/05/2019, 7:44 AMfun View.renderState1(state) {
when(state) {
is Loading -> {
progressBar.visibility = View.VISIBLE
errorView.visibility = View.GONE
contentView.visibility = View.GONE
whateEverView.visibility = View.GONE
somethingView.visibility = View.GONE
}
is Success -> {
progressBar.visibility = View.GONE
errorView.visibility = View.GONE
contentView.visibility = View.VISIBLE
contentView.setData(state.data)
whateEverView.visibility = View.GONE
somethingView.visibility = View.GONE
}
is Error -> {
progressBar.visibility = View.GONE
errorView.visibility = View.VISIBLE
errorView.setErrorMessage(state.errorMessage)
contentView.visibility = View.GONE
whateEverView.visibility = View.GONE
somethingView.visibility = View.GONE
}
is Whatever -> {
progressBar.visibility = View.GONE
errorView.visibility = View.VISIBLE
errorView.setErrorMessage(state.errorMessage)
contentView.visibility = View.GONE
whateEverView.visibility = View.VISIBILE
somethingView.visibility = View.GONE
}
is Something -> {
progressBar.visibility = View.GONE
errorView.visibility = View.VISIBLE
errorView.setErrorMessage(state.errorMessage)
contentView.visibility = View.GONE
whateEverView.visibility = View.GONE
somethingView.visibility = View.VISIBLE
}
}
}
Edgars
12/05/2019, 8:05 AMwhen
case to its own function (as in the snippet I posted). Then, if all of the cases work with the same bunch of views, you could have something like:
fun showViews(content: Boolean = false, error: Boolean = false, something: Boolean = false) {
content.isVisible = content
error.isVisible = error
// ...
}
that you would call like showViews(error = true)
.ursus
12/05/2019, 8:49 AMEdgars
12/05/2019, 9:49 AMwhen (state) {
is Success -> {
showViews(content = true)
// update UI content here
}
// ...
}
Personally, I wouldn't be too worried about having someView.isVisible = false
in each of the showFooState()
functions, but that's just me.Rodrigo Fonseca
12/05/2019, 1:27 PMviewflipper
Steve
12/05/2019, 5:24 PMshowLoadingState()
where you just list off all the views and explicitly set their visibility state, among other things, isn't bad