Как лучше исправить: Unresolved reference 'NavHostController'?
Сейчас ситуация такая: при первой же попытки сделать переход от экрана к экрану (Jetpack Compose), получил ошибкуПо вводным: unresolved reference 'NavHostController'.
По вводным: в файле, что находится в пакете "kotlin" импортирую:
import androidx.navigation.compose.NavHostController
По вводным: в файл: "build.gradle.kts" в dependencies добавляю строку:
implementation(libs.androidx.navigation.compose)
По вводным: в "libs.versions.toml" дописываю:
[versions] navigation = "2.9.7" [libraries] androidx-navigation-compose = { group = "androidx.navigation", name = "navigation-compose", version.ref = "navigation" }
Сейчас ситуация такая: жму: "File > Sync Project with Gradle Files" (Android Studio), но ошибка:По вводным: unresolved reference 'NavHostController'Остаётся...
Если так:
import androidx.navigation.NavHostController
Сейчас ситуация такая: ошибки нет... Но мне нужна версия Compose:
import androidx.navigation.compose.NavHostController
Сейчас ситуация такая: подскажите, куда копать, чтобы исправить ошибку? Или хотя бы где рыться, чтобы найти причину.
Спасибо.
По вводным: я только начал писать приложение, кода в несколько строк в двух файлах.
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Ошибка здесь из-за неправильного импорта. Класс
NavHostControllerнаходится не вandroidx.navigation.compose, а в пакетеandroidx.navigation. Поэтому вариант:import androidx.navigation.NavHostController
как раз и является правильным. Для Compose из
androidx.navigation.composeобычно импортируются функции и composable-части:NavHost,composable,rememberNavController.Типичный набор импортов выглядит так:
import androidx.navigation.NavHostController import androidx.navigation.compose.NavHost import androidx.navigation.compose.composable import androidx.navigation.compose.rememberNavController
А код навигации примерно так:
@Composable fun AppNavigation() { val navController = rememberNavController() NavHost( navController = navController, startDestination = "home" ) { composable("home") { HomeScreen( onOpenDetails = { navController.navigate("details") } ) } composable("details") { DetailsScreen() } } }
Зависимость в Gradle у вас по смыслу правильная, если alias действительно ссылается на
androidx.navigation:navigation-compose:[versions] navigation = "2.9.7" [libraries] androidx-navigation-compose = { group = "androidx.navigation", name = "navigation-compose", version.ref = "navigation" }[versions] navigation = "2.9.7" [libraries] androidx-navigation-compose = { group = "androidx.navigation", name = "navigation-compose", version.ref = "navigation" }
И в module
build.gradle.kts:dependencies { implementation(libs.androidx.navigation.compose) }
После sync можно проверить External Libraries: там должен быть артефакт navigation-compose. Но конкретно
NavHostControllerне надо искать в compose-пакете. Он общий для Navigation и импортируется изandroidx.navigation.Итог: оставляйте
import androidx.navigation.NavHostController. Это не “не Compose-версия”, а правильный тип контроллера, который используется и в Compose Navigation. Из compose-пакета импортируйтеrememberNavController,NavHostиcomposable.