fix: use LaunchedEffect instead of state conditionals

This commit is contained in:
Infi 2023-02-18 00:04:08 +01:00
parent c8242507b3
commit d88f7d6b33
3 changed files with 24 additions and 39 deletions

View File

@ -7,10 +7,7 @@ import android.net.NetworkCapabilities
import androidx.compose.foundation.Image
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.*
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.setValue
import androidx.compose.runtime.*
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.layout.ContentScale
@ -137,7 +134,7 @@ fun SplashScreen(
)
}
if (viewModel.navigateTo.isNotEmpty()) {
LaunchedEffect(viewModel.navigateTo) {
when (viewModel.navigateTo) {
"login" -> {
navController.navigate("login/greeting") {
@ -154,6 +151,5 @@ fun SplashScreen(
}
}
}
viewModel.setNavigateTo("")
}
}

View File

@ -6,10 +6,7 @@ import androidx.compose.material3.Button
import androidx.compose.material3.ElevatedButton
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.setValue
import androidx.compose.runtime.*
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource
@ -91,9 +88,6 @@ class LoginViewModel @Inject constructor(
}
}
fun navigationComplete() {
_navigateTo = null
}
fun setEmail(email: String) {
_email = email
@ -109,20 +103,23 @@ fun LoginScreen(
navController: NavController,
viewModel: LoginViewModel = hiltViewModel()
) {
if (viewModel.navigateTo == "mfa") {
navController.navigate(
"login/mfa/${viewModel.mfaResponse!!.mfaSpec!!.ticket}/${
viewModel.mfaResponse!!.mfaSpec!!.allowedMethods.joinToString(
","
LaunchedEffect(viewModel.navigateTo) {
when (viewModel.navigateTo) {
"mfa" -> {
navController.navigate(
"login/mfa/${viewModel.mfaResponse!!.mfaSpec!!.ticket}/${
viewModel.mfaResponse!!.mfaSpec!!.allowedMethods.joinToString(
","
)
}"
)
}"
)
viewModel.navigationComplete()
} else if (viewModel.navigateTo == "home") {
navController.navigate("chat") {
popUpTo("login/greeting") { inclusive = true }
}
"home" -> {
navController.navigate("chat") {
popUpTo("login/greeting") { inclusive = true }
}
}
}
viewModel.navigationComplete()
}
Column(
@ -199,8 +196,6 @@ fun LoginScreen(
.padding(horizontal = 20.dp, vertical = 30.dp),
horizontalAlignment = Alignment.CenterHorizontally
) {
Weblink(
text = stringResource(R.string.password_manager_hint),
url = "$REVOLT_SUPPORT/kb/interface/android/using-a-password-manager",

View File

@ -8,10 +8,7 @@ import androidx.compose.material3.Button
import androidx.compose.material3.ElevatedButton
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.setValue
import androidx.compose.runtime.*
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource
@ -65,10 +62,6 @@ class MfaScreenViewModel @Inject constructor(
_recoveryCode = code
}
fun navigationComplete() {
_navigateToHome = false
}
fun tryAuthorizeTotp(mfaTicket: String) {
_error = null
viewModelScope.launch {
@ -128,11 +121,12 @@ fun MfaScreen(
) {
val allowedAuthTypes = allowedAuthTypesCommaSep.split(",")
if (viewModel.navigateToHome) {
navController.navigate("chat") {
popUpTo("login/greeting") { inclusive = true }
LaunchedEffect(viewModel.navigateToHome) {
if (viewModel.navigateToHome) {
navController.navigate("chat") {
popUpTo("login/greeting") { inclusive = true }
}
}
viewModel.navigationComplete()
}
Column(