Ссылка на LazyColumn возвращает начальное положение

У меня есть приложение. Большая картинка и снизу идет LazyColumn. Когда я перехожу по 4 (или 5) ссылке и потом назад мой LazyColumn оказывается в начальном положении. Ссылка 1 в самом верху. И когда я хочу снова ссылку 4 мне приходится "крутить".

Кнопка "Назад" на "родной" навигационной панели другая. Когда я возвращаюсь назад LazyColumn уже ждет меня в том виде, в котором я ее оставила.

Что нужно сделать в программе что бы и верхняя кнопка вела себя так-же как и кнопка "назад" на навигационной панели?

Вот мои файлы:

введите сюда описание изображения

NavGraph.kt

@Composable
fun NavGraph (navController: NavHostController){
    NavHost(navController = navController, startDestination = Screens.Contents.route
    ) {
        addContentsScreen(navController, this)
        addScreen1(navController, this)
        addScreen2(navController, this)
        addScreen3(navController, this)
        addScreen4(navController, this)
        addScreen5(navController, this)
    }
}

private fun addContentsScreen(
    navController: NavHostController,
    navGraphBuilder: NavGraphBuilder
) {
    navGraphBuilder.composable(route = Screens.Contents.route) {
        ContentsScreen(
            navigateScreen1 = { navController.navigate(Screens.Screens1.route) },
            navigateScreen2 = { navController.navigate(Screens.Screens2.route) },
            navigateScreen3 = { navController.navigate(Screens.Screens3.route) },
            navigateScreen4 = { navController.navigate(Screens.Screens4.route) },
            navigateScreen5 = { navController.navigate(Screens.Screens5.route) },
        )
    }
}

private fun addScreen1(navController: NavHostController, navGraphBuilder: NavGraphBuilder) {
    navGraphBuilder.composable(route = Screens.Screens1.route) {
        Screen1 (navigateContentsScreen = { navController.navigate(Screens.Contents.route) })
    }
}

private fun addScreen2(navController: NavHostController, navGraphBuilder: NavGraphBuilder) {
    navGraphBuilder.composable(route = Screens.Screens2.route) {
        Screen2 (navigateContentsScreen = { navController.navigate(Screens.Contents.route) })
    }
}

private fun addScreen3(navController: NavHostController, navGraphBuilder: NavGraphBuilder) {
    navGraphBuilder.composable(route = Screens.Screens3.route) {
        Screen3 (navigateContentsScreen = { navController.navigate(Screens.Contents.route) })
    }
}

private fun addScreen4(navController: NavHostController, navGraphBuilder: NavGraphBuilder) {
    navGraphBuilder.composable(route = Screens.Screens4.route) {
        Screen4 (navigateContentsScreen = { navController.navigate(Screens.Contents.route) })
    }
}

private fun addScreen5(navController: NavHostController, navGraphBuilder: NavGraphBuilder) {
    navGraphBuilder.composable(route = Screens.Screens5.route) {
        Screen5 (navigateContentsScreen = { navController.navigate(Screens.Contents.route) })
    }
}

Screens

sealed class Screens(val route: String) {
    data object Contents : Screens("contents_screen")
    data object Screens1 : Screens("screen_1");
    data object Screens2 : Screens("screen_2");
    data object Screens3 : Screens("screen_3")
    data object Screens4 : Screens("screen_4");
    data object Screens5 : Screens("screen_5");
}

Screens.kt

class Item(val link: () -> Unit, val name: String)

@Composable
fun ContentsList(explanation: List<Item>) {
    val listState = rememberLazyListState()
    LazyColumn(state = listState) {
        items(explanation.size) { index ->
            val item = explanation[index]
            ContentsButton(
                onClick = item.link,
                text = item.name
            )
        }
    }
}

@Composable
fun ContentsScreen(
    navigateScreen1: () -> Unit,
    navigateScreen2: () -> Unit,
    navigateScreen3: () -> Unit,
    navigateScreen4: () -> Unit,
    navigateScreen5: () -> Unit,
) {
    val listOfQuestions = listOf(
        Item( navigateScreen1, "Screen1"),
        Item( navigateScreen2, "Screen2"),
        Item( navigateScreen3, "Screen3"),
        Item( navigateScreen4, "Screen4"),
        Item( navigateScreen5, "Screen5"),
    )
    Column {
        Image(
            modifier = Modifier.height(650.dp),
            painter = painterResource(id = R.drawable.cat),
            contentDescription = null,
            contentScale = ContentScale.Crop
        )
        ContentsList(listOfQuestions)
    }
}

Screen4.kt

@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun Screen4(
    navigateContentsScreen: () -> Unit,
) {
    val text = "Screen4"
    Scaffold(
        containerColor = lightGray,
        contentColor = darkGrey,
        topBar = {
            TopAppBar(
                modifier = Modifier.height(80.dp),
                title = {
                    Box(
                        Modifier.fillMaxHeight(),
                        contentAlignment = Alignment.Center
                    ) {
                        Text(
                            maxLines = 1,
                            overflow = TextOverflow.Ellipsis,
                            text = text,
                            color = orange,
                        )
                    }
                },
                navigationIcon = {
                    Box(
                        Modifier.fillMaxHeight(),
                        contentAlignment = Alignment.Center
                    ) {
                        IconButton(
                            onClick = navigateContentsScreen
                        ) {
                            Icon(
                                imageVector = Icons.Filled.ArrowBack,
                                contentDescription = "Back",
                                tint = orange,
                            )
                        }
                    }
                },
                colors = TopAppBarDefaults.mediumTopAppBarColors(
                    containerColor = darkGrey
                )
            )
        }
    ) { contentPadding ->
        Column(
            modifier = Modifier
                .fillMaxSize()
                .padding(contentPadding)
                .verticalScroll(rememberScrollState()),
        ) {
            Text(
                text = "Screen4",
                color = darkGrey,
                textAlign = TextAlign.Justify,
                modifier = Modifier.padding(24.dp)
            )
        }
    }
}

Ответы (1 шт):

Автор решения: Alice Magic

Я нашла ответ. В файле NavGraph.kt нужно изменить код:

private fun addScreen4(navController: NavHostController, navGraphBuilder: NavGraphBuilder) {
    navGraphBuilder.composable(route = Screens.Screens4.route) {
        Screen4 (navigateContentsScreen = { navController.navigateUp() })
    }
}

для всех пяти ссылок.

→ Ссылка