Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

conditional navigation in compose, without click

I am working on a compose screen, where on application open, i redirect user to profile page. And if profile is complete, then redirect to user list page.

my code is like below

@Composable
fun UserProfile(navigateToProviderList: () -> Unit) {

val viewModel: MainActivityViewModel = viewModel()

if(viewModel.userProfileComplete == true) {
    navigateToProviderList()
    return
}

else {
  //compose elements here
}

}

but the app is blinking and when logged, i can see its calling the above redirect condition again and again. when going through doc, its mentioned that we should navigate only through callbacks. How do i handle this condition here? i don't have onCLick condition here.

like image 389
Bharat Kumar Avatar asked May 20 '26 23:05

Bharat Kumar


1 Answers

Content of composable function can be called many times.

If you need to do some action inside composable, you need to use side effects

In this case LaunchedEffect should work:

LaunchedEffect(viewModel.userProfileComplete == true) {
    if(viewModel.userProfileComplete == true) {
        navigateToProviderList()
    }
}

In the key(first argument of LaunchedEffect) you need to specify some key. Each time this key changes since the last recomposition, the inner code will be called. You may put Unit there, in this case it'll only be called once, when the view appears at the first place

like image 133
Philip Dukhov Avatar answered May 22 '26 12:05

Philip Dukhov



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!