Можете ли вы передать NavHostController дочернему компоненту Composable, чтобы разрешить доступ к navController.navigate (Route)?

Я новичок в Jetpack Compose и изо всех сил пытаюсь понять, как интегрировать библиотеку навигации с Compose. Я успешно реализовал нижнюю навигацию, но сейчас мне трудно получить доступ к методу .navigate (route) в дочернем компоненте. Должен ли я передавать navController в качестве параметра из composeable внутри NavHost? Вот мой код, чтобы прояснить ситуацию.

Вот мой HomeScreen.kt @Composable, который вызывает метод RememberNavController (), а также составной компонент NavHost () следующим образом ...

@Composable
fun HomeScreen() {
val navController = rememberNavController()
...
Scaffold(
   ...
) {
    NavHost(navController, startDestination = "route") {
        composable("route") { Settings(navController) }
  } 
}

Итак, здесь вы можете видеть, что я передаю navController в качестве параметра в компонент «Настройки». Я не уверен, что это правильно. Теперь, в конечном счете, из составного компонента «Настройки» я хотел бы получить доступ к методу navController.navigate (route), если это возможно, как показано ниже.

@Composable
fun Settings(navController: NavHostController) {
   ...
   Button(onClick = {navController.navigate("route")}) {
        Text(text = "button text")
    }
   ...
}

К сожалению, я не могу получить доступ к методу .navigate, поскольку в нем говорится, что ни одна из следующих функций не может быть вызвана с предоставленными аргументами. Спасибо за потраченное время и помощь !!


person Jake Schnorr    schedule 25.11.2020    source источник


Ответы (1)


Метод navigate("route") - это метод расширения. Поэтому вы должны явно импортировать его:

import androidx.navigation.compose.navigate
person ianhanniballake    schedule 25.11.2020
comment
Обратите внимание на открытую проблему с Android Studio, пытающуюся разобраться в причинах, почему Studio не выполняет автоматическую рекомендую импортировать это расширение. - person ianhanniballake; 26.11.2020
comment
УХ ТЫ! Огромное спасибо. Если бы ты был рядом, я бы тебя поцеловал! (работал, кстати) .... и да, я определенно слишком полагался на Android Studio, предлагающий мне импортировать расширение. - person Jake Schnorr; 26.11.2020
comment
Я рад, что это сработало. Обязательно примите этот ответ, чтобы удалить вопрос из списка вопросы без ответов. Удачи в будущем! - person ianhanniballake; 26.11.2020