Использование navigation-compose с deeplink внутри LazyColumn

Я читала статью об обработке диплинков с помощью navigation-compose, но не нашла ничего полезного для своего use-case — для навигации внутри LazyColumn. У меня есть следующий основной Composable, который я хочу сделать корнем графa (хочу, чтобы он был хостом для NavHost):

@Composable
private fun MainScreenContainer(
    mainState: state,
    ...
) {
    val navController = rememberNavController()

    MainTheme {
        Box(
            modifier = Modifier.fillMaxSize()
        ) {
            val listState = rememberLazyListState()
            LazyColumn(
                state = listState,
                modifier = Modifier.fillMaxSize()
            ) {
                mainScreenContent(
                    state = mainState,
                    ...
                )
            }
            StickyToolbar(
                ...
            )
        }
    }
}

и вот оставшийся код:

private fun LazyListScope.mainScreenContent(
    mainState: MainState,
    ...
) {
    header(...)
    overview(...)
    myCard(...)
    footer()
}

private fun LazyListScope.myCard(
    ...
) {
    item {
        ContentContainer(
            modifier = Modifier.padding(vertical = MainTheme.spacing.medium)
        ) {
            MyCardStateless(
                onCardClick = myCardViewModel::onCardClick,
                ...
            )
        }
    }
}

@Composable
fun MyCardStateless(
    onCardClick: () -> Unit,
    ...
) {
    Column(modifier = modifier) {
        Card(
            modifier = Modifier.fillMaxWidth()
                .clickable(onClick = onCardClick)
        ) { ... }
    }
}

И внутри MyCardViewModel я использовала переход к другому фрагменту, используя обычный Navigation Component:

fun onCardClick() {
    navigate(
        MainFragmentDirections.actionMainFragmentToDescriptionFragment()
    )
}

@AndroidEntryPoint
class DescriptionFragment : ...() {

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        ...
        setContent {
            DescriptionStateful(...)
        }
    }
    ...
}

Но теперь я хочу добавить два deeplink-a (deeplink «myapp://mycard» — который бы вёл к MyCardStateless и «myapp://description» — который бы вёл открывал DescriptionFragment или DescriptionStateful) и я хотела бы обрабатывать навигацию с помощью navigation-compose. Это вообще возможно? И если да, то как?


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