Я играю с новым плагином Kotlin DSL Navigation Compose, но получаю исключение:
java.lang.IllegalStateException: невозможно найти startDestination com.perissf.myapp.SignIn из NavGraph. Убедитесь, что начальный NavDestination был добавлен с маршрутом из KClass.
Сборный
NavHost(
navController = navController,
startDestination = SignIn,
) {
// if I remove the following lines calling NavGraphBuilder.composable() extension function, I get the exception
composable<SignIn> {
SignInScreen()
}
signInDestination()
}
ВойтиNavigation.kt
@Serializable
object SignIn
fun NavGraphBuilder.signInDestination () {
composable<SignIn> {
SignInScreen()
}
}
Странно то, что если я удалю вызов функции расширения NavGraphBuilder.composable
, как подробно описано в комментарии к коду, я получу исключение; если я оставлю его, он будет работать нормально, но в конечном итоге он должен делать то же самое, что и вызов функции расширения signInDestination()
, написанной мной.
Используя передовую библиотеку androidx.navigation:navigation-compose:2.8.0-beta04@aar
и следуя построчно этому руководству для разработчиков Android: Инкапсулируйте свой навигационный код
@ianhanniballake конечно: androidx.navigation.compose.composable
в обоих файлах
А если метод signInDestination()
находится в том же файле, что и ваш NavHost, он все равно не работает?
@ianhanniballake ваша подсказка привела меня в правильном направлении: действительно, перемещая расширение в новый файл, я ошибочно оставил @Serializable object SignIn
в обоих местах и импортировал не то. Теперь все работает нормально. Спасибо!!!
Сообщение об ошибке указывает, что конкретный класс, который вы используете при вводе startDestination = SignIn
, отсутствует в графе навигации, т. е. не существует ни одного composable<SignIn>
, использующего тот же самый SignIn
объект.
Убедитесь, что вы ссылаетесь на один и тот же объект, проверив импорт в своих файлах. Хорошая проверка — переместить метод расширения в тот же файл и посмотреть, работает ли это, а затем повторить попытку в новом месте.
Вы используете один и тот же импорт
composable
в обоих файлах?