Compose Navigation recomposition on navigation

32 Views Asked by At

I saw an issue in android compose navigation. I have a simple app with two screens, each containing a button to the other screen, each screen have a log statement in the begining. On pressing the button in either screen a recomposition pattern is being observed in the Logs and layout inspector.

I checked the layout inspector tab also, It looks like recomposition is not getting skipped, it happening all the time. There is no viewmodel or state in screens.

@Composable
fun Screen1(
    onNavigate2: () -> Unit,
) {
    Log.e("SCREEN", "Screen 1")
    Column(
        verticalArrangement = Arrangement.Bottom,
        horizontalAlignment = Alignment.CenterHorizontally
    ) {
        Text(text = "Screen 1")
        Spacer(modifier = Modifier.height(12.dp))
        Button(onClick = onNavigate2) {
            Text(text = "Screen 2")
        }
    }
}

@Composable
fun Screen2(
    onNavigate1: () -> Unit,
) {
    Log.e("SCREEN", "Screen 2")
    Column(
        verticalArrangement = Arrangement.Top,
        horizontalAlignment = Alignment.CenterHorizontally
    ) {
        Text(text = "Screen 2")
        Spacer(modifier = Modifier.height(12.dp))
        Button(onClick = onNavigate1) {
            Text(text = "Screen 1")
        }
    }
}

@Composable
fun AppNav() {
    val navController = rememberNavController()
    Log.e("AppNav", "AppNav")
    NavHost(
        modifier = Modifier.fillMaxSize(),
        navController = navController,
        startDestination = "screen1"
    ) {
        composable(route = "screen1") {
            Screen1(
                onNavigate2 = {
                    navController.navigate("screen2")
                }
            )
        }
        composable(route = "screen2") {
            Screen2(
                onNavigate1 = {
                    navController.navigate("screen1")
                }
            )
        }
    }
}

Logs :-

2024-03-06 15:23:01.588 28919-28919 PracticeTheme  E  PracticeTheme
2024-03-06 15:23:01.590 28919-28919 Surface        E  Surface
2024-03-06 15:23:01.590 28919-28919 AppNav         E  AppNav
2024-03-06 15:23:01.598 28919-28919 SCREEN         E  Screen 1

After pressing button to navigate to screen 2 :-

2024-03-06 15:23:24.654 28919-28919 SCREEN         E  Screen 1
2024-03-06 15:23:24.660 28919-28919 SCREEN         E  Screen 2
2024-03-06 15:23:24.686 28919-28919 SCREEN         E  Screen 1
2024-03-06 15:23:24.691 28919-28919 SCREEN         E  Screen 2
2024-03-06 15:23:25.389 28919-28919 SCREEN         E  Screen 2
2024-03-06 15:23:25.408 28919-28919 SCREEN         E  Screen 2
0

There are 0 best solutions below