Как лучше исправить: Unresolved reference 'NavHostController'?

Ссылка скопирована
1 ответ

Сейчас ситуация такая: при первой же попытки сделать переход от экрана к экрану (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

Сейчас ситуация такая: подскажите, куда копать, чтобы исправить ошибку? Или хотя бы где рыться, чтобы найти причину.
Спасибо.

По вводным: я только начал писать приложение, кода в несколько строк в двух файлах.

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Стас DB Ответ

Ошибка здесь из-за неправильного импорта. Класс NavHostController находится не в androidx.navigation.compose, а в пакете androidx.navigation. Поэтому вариант:

import androidx.navigation.NavHostController

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

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()
        }
    }
}

@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)
}

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.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно