setup EventsEffect (#17)

This commit is contained in:
Andrew Haisting 2023-08-30 14:23:21 -05:00 committed by Álison Fernandes
parent 13e2539f5d
commit 72a7438e3d
2 changed files with 28 additions and 12 deletions

View file

@ -0,0 +1,22 @@
package com.x8bit.bitwarden.ui.base.util
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import com.x8bit.bitwarden.ui.base.BaseViewModel
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.onEach
/**
* Convenience method for observing event flow from [BaseViewModel].
*/
@Composable
fun <E> EventsEffect(
viewModel: BaseViewModel<*, E, *>,
handler: (E) -> Unit,
) {
LaunchedEffect(key1 = Unit) {
viewModel.eventFlow
.onEach { handler.invoke(it) }
.launchIn(this)
}
}

View file

@ -12,7 +12,6 @@ import androidx.compose.foundation.layout.padding
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalContext
@ -20,9 +19,8 @@ import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.lifecycle.viewmodel.compose.viewModel import androidx.lifecycle.viewmodel.compose.viewModel
import com.x8bit.bitwarden.R import com.x8bit.bitwarden.R
import com.x8bit.bitwarden.ui.base.util.EventsEffect
import com.x8bit.bitwarden.ui.components.BitwardenTextField import com.x8bit.bitwarden.ui.components.BitwardenTextField
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.onEach
/** /**
* Top level composable for the create account screen. * Top level composable for the create account screen.
@ -32,16 +30,12 @@ fun CreateAccountScreen(
viewModel: CreateAccountViewModel = viewModel(), viewModel: CreateAccountViewModel = viewModel(),
) { ) {
val context = LocalContext.current val context = LocalContext.current
LaunchedEffect(key1 = Unit) { EventsEffect(viewModel) { event ->
viewModel.eventFlow when (event) {
.onEach { event -> is CreateAccountEvent.ShowToast -> {
when (event) { Toast.makeText(context, event.text, Toast.LENGTH_SHORT).show()
is CreateAccountEvent.ShowToast -> {
Toast.makeText(context, event.text, Toast.LENGTH_SHORT).show()
}
}
} }
.launchIn(this) }
} }
Column( Column(