@@ -6,6 +6,7 @@ import android.view.MenuItem
66import androidx.core.view.isInvisible
77import androidx.transition.AutoTransition
88import androidx.transition.TransitionManager
9+ import com.google.android.material.textfield.TextInputLayout
910import com.hoc.flowmvi.core_ui.clicks
1011import com.hoc.flowmvi.core_ui.firstChange
1112import com.hoc.flowmvi.core_ui.navigator.IntentProviders
@@ -52,31 +53,17 @@ class AddActivity :
5253 override fun render (viewState : ViewState ) {
5354 Timber .d(" viewState=$viewState " )
5455
55- val emailErrorMessage = if (ValidationError .INVALID_EMAIL_ADDRESS in viewState.errors) {
56- " Invalid email"
57- } else {
58- null
56+ addBinding.emailEditText.setErrorIfChanged(viewState.emailChanged) {
57+ if (ValidationError .INVALID_EMAIL_ADDRESS in viewState.errors) " Invalid email"
58+ else null
5959 }
60- if (viewState.emailChanged && addBinding.emailEditText.error != emailErrorMessage) {
61- addBinding.emailEditText.error = emailErrorMessage
60+ addBinding.firstNameEditText.setErrorIfChanged(viewState.firstNameChanged) {
61+ if (ValidationError .TOO_SHORT_FIRST_NAME in viewState.errors) " Too short first name"
62+ else null
6263 }
63-
64- val firstNameErrorMessage = if (ValidationError .TOO_SHORT_FIRST_NAME in viewState.errors) {
65- " Too short first name"
66- } else {
67- null
68- }
69- if (viewState.firstNameChanged && addBinding.firstNameEditText.error != firstNameErrorMessage) {
70- addBinding.firstNameEditText.error = firstNameErrorMessage
71- }
72-
73- val lastNameErrorMessage = if (ValidationError .TOO_SHORT_LAST_NAME in viewState.errors) {
74- " Too short last name"
75- } else {
76- null
77- }
78- if (viewState.lastNameChanged && addBinding.lastNameEditText.error != lastNameErrorMessage) {
79- addBinding.lastNameEditText.error = lastNameErrorMessage
64+ addBinding.lastNameEditText.setErrorIfChanged(viewState.lastNameChanged) {
65+ if (ValidationError .TOO_SHORT_LAST_NAME in viewState.errors) " Too short last name"
66+ else null
8067 }
8168
8269 TransitionManager .beginDelayedTransition(
@@ -139,3 +126,14 @@ class AddActivity :
139126 Intent (context, AddActivity ::class .java)
140127 }
141128}
129+
130+ private inline fun TextInputLayout.setErrorIfChanged (
131+ errorEnabled : Boolean ,
132+ errorBuilder : () -> String? ,
133+ ) {
134+ val newError = if (errorEnabled) errorBuilder() else null
135+ // avoid unnecessary animation
136+ if (error != newError) {
137+ error = newError
138+ }
139+ }
0 commit comments