Handle some Compose side effects

This commit is contained in:
Mohamed
2024-05-29 16:56:51 +03:00
parent fcf7f40af3
commit 8aadc9c5af
4 changed files with 20 additions and 26 deletions

View File

@ -22,7 +22,6 @@ import androidx.compose.ui.unit.dp
import app.omnivore.omnivore.R
import app.omnivore.omnivore.feature.theme.OmnivoreTheme
import com.google.android.gms.common.GoogleApiAvailability
import kotlinx.coroutines.launch
@Composable
fun WelcomeScreen(viewModel: LoginViewModel) {
@ -40,11 +39,10 @@ fun WelcomeScreen(viewModel: LoginViewModel) {
@Composable
fun WelcomeScreenContent(viewModel: LoginViewModel) {
val registrationState: RegistrationState by viewModel.registrationStateLiveData.observeAsState(
RegistrationState.SocialLogin
)
RegistrationState.SocialLogin
)
val snackBarHostState = remember { SnackbarHostState() }
val coroutineScope = rememberCoroutineScope()
Column(
verticalArrangement = Arrangement.SpaceAround,
@ -101,19 +99,18 @@ fun WelcomeScreenContent(viewModel: LoginViewModel) {
Spacer(modifier = Modifier.weight(1.0F))
}
if (viewModel.errorMessage != null) {
coroutineScope.launch {
val result = snackBarHostState.showSnackbar(
viewModel.errorMessage!!,
actionLabel = "Dismiss",
duration = SnackbarDuration.Indefinite
)
when (result) {
SnackbarResult.ActionPerformed -> viewModel.resetErrorMessage()
else -> {}
}
LaunchedEffect(viewModel.errorMessage) {
val result = snackBarHostState.showSnackbar(
viewModel.errorMessage!!,
actionLabel = "Dismiss",
duration = SnackbarDuration.Indefinite
)
when (result) {
SnackbarResult.ActionPerformed -> viewModel.resetErrorMessage()
else -> {}
}
}
if (viewModel.errorMessage != null) {
SnackbarHost(hostState = snackBarHostState)
}
}

View File

@ -8,10 +8,10 @@ import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Scaffold
import androidx.compose.material3.SnackbarHostState
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue
import androidx.compose.runtime.livedata.observeAsState
import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.StrokeCap
@ -43,12 +43,10 @@ internal fun FollowingScreen(
) {
val snackbarHostState = remember { SnackbarHostState() }
val coroutineScope = rememberCoroutineScope()
val uiState by viewModel.uiState.collectAsStateWithLifecycle()
viewModel.snackbarMessage?.let {
coroutineScope.launch {
LaunchedEffect(viewModel.snackbarMessage) {
viewModel.snackbarMessage?.let {
snackbarHostState.showSnackbar(it)
viewModel.clearSnackbarMessage()
}

View File

@ -20,7 +20,7 @@ import androidx.compose.material3.Scaffold
import androidx.compose.material3.SnackbarHost
import androidx.compose.material3.SnackbarHostState
import androidx.compose.runtime.Composable
import androidx.compose.runtime.DisposableEffect
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue
import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier
@ -98,11 +98,10 @@ fun RootView(
startDestination = startDestination,
loginViewModel = loginViewModel
)
DisposableEffect(hasAuthToken) {
LaunchedEffect(hasAuthToken) {
if (hasAuthToken) {
loginViewModel.registerUser()
}
onDispose {}
}
}
}

View File

@ -15,9 +15,9 @@ import app.omnivore.omnivore.feature.library.SavedItemAction
@OptIn(ExperimentalFoundationApi::class)
@Composable
fun TypeaheadSearchCard(cardData: TypeaheadCardData, onClickHandler: () -> Unit, actionHandler: (SavedItemAction) -> Unit) {
fun TypeaheadSearchCard(modifier: Modifier = Modifier, cardData: TypeaheadCardData, onClickHandler: () -> Unit, actionHandler: (SavedItemAction) -> Unit) {
Column(
modifier = Modifier
modifier = modifier
.combinedClickable(
onClick = onClickHandler,
)