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.Image
import androidx.compose.foundation.background import androidx.compose.foundation.background
import androidx.compose.foundation.layout.* import androidx.compose.foundation.layout.*
import androidx.compose.runtime.Composable import androidx.compose.runtime.*
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.layout.ContentScale
@ -137,7 +134,7 @@ fun SplashScreen(
) )
} }
if (viewModel.navigateTo.isNotEmpty()) { LaunchedEffect(viewModel.navigateTo) {
when (viewModel.navigateTo) { when (viewModel.navigateTo) {
"login" -> { "login" -> {
navController.navigate("login/greeting") { 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.ElevatedButton
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.*
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
@ -91,9 +88,6 @@ class LoginViewModel @Inject constructor(
} }
} }
fun navigationComplete() {
_navigateTo = null
}
fun setEmail(email: String) { fun setEmail(email: String) {
_email = email _email = email
@ -109,20 +103,23 @@ fun LoginScreen(
navController: NavController, navController: NavController,
viewModel: LoginViewModel = hiltViewModel() viewModel: LoginViewModel = hiltViewModel()
) { ) {
if (viewModel.navigateTo == "mfa") { LaunchedEffect(viewModel.navigateTo) {
navController.navigate( when (viewModel.navigateTo) {
"login/mfa/${viewModel.mfaResponse!!.mfaSpec!!.ticket}/${ "mfa" -> {
viewModel.mfaResponse!!.mfaSpec!!.allowedMethods.joinToString( navController.navigate(
"," "login/mfa/${viewModel.mfaResponse!!.mfaSpec!!.ticket}/${
viewModel.mfaResponse!!.mfaSpec!!.allowedMethods.joinToString(
","
)
}"
) )
}" }
) "home" -> {
viewModel.navigationComplete() navController.navigate("chat") {
} else if (viewModel.navigateTo == "home") { popUpTo("login/greeting") { inclusive = true }
navController.navigate("chat") { }
popUpTo("login/greeting") { inclusive = true } }
} }
viewModel.navigationComplete()
} }
Column( Column(
@ -199,8 +196,6 @@ fun LoginScreen(
.padding(horizontal = 20.dp, vertical = 30.dp), .padding(horizontal = 20.dp, vertical = 30.dp),
horizontalAlignment = Alignment.CenterHorizontally horizontalAlignment = Alignment.CenterHorizontally
) { ) {
Weblink( Weblink(
text = stringResource(R.string.password_manager_hint), text = stringResource(R.string.password_manager_hint),
url = "$REVOLT_SUPPORT/kb/interface/android/using-a-password-manager", 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.ElevatedButton
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.*
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
@ -65,10 +62,6 @@ class MfaScreenViewModel @Inject constructor(
_recoveryCode = code _recoveryCode = code
} }
fun navigationComplete() {
_navigateToHome = false
}
fun tryAuthorizeTotp(mfaTicket: String) { fun tryAuthorizeTotp(mfaTicket: String) {
_error = null _error = null
viewModelScope.launch { viewModelScope.launch {
@ -128,11 +121,12 @@ fun MfaScreen(
) { ) {
val allowedAuthTypes = allowedAuthTypesCommaSep.split(",") val allowedAuthTypes = allowedAuthTypesCommaSep.split(",")
if (viewModel.navigateToHome) { LaunchedEffect(viewModel.navigateToHome) {
navController.navigate("chat") { if (viewModel.navigateToHome) {
popUpTo("login/greeting") { inclusive = true } navController.navigate("chat") {
popUpTo("login/greeting") { inclusive = true }
}
} }
viewModel.navigationComplete()
} }
Column( Column(