fix: use LaunchedEffect instead of state conditionals
This commit is contained in:
parent
c8242507b3
commit
d88f7d6b33
|
|
@ -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("")
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -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",
|
||||||
|
|
|
||||||
|
|
@ -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(
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue