Как установить пункт назначения в NavBuilder.navigation как startDestination с безопасной навигацией типа Jetpack ComposAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Как установить пункт назначения в NavBuilder.navigation как startDestination с безопасной навигацией типа Jetpack Compos

Сообщение Anonymous »

Можно ли установить начальный пункт назначения NavGraph в качестве пункта назначения в NavGraphBuilder.navigation(){}?

Код: Выделить всё

private fun NavGraphBuilder.addNavGraph(navController: NavController) {

composable {
RouteAScreen(navController)
}

navigation(
startDestination = RouteB
) {
composable {
RouteBScreen(navController)
}

composable(
deepLinks = listOf(
navDeepLink(basePath = "$uri/routeC")
)
) {
RouteCScreen(navController)
}

composable(
deepLinks = listOf(
navDeepLink(basePath = "$uri/routeD")
)
) {
RouteDScreen(navController)
}
}
}
Я тестировал NavHost с помощью конструктора и создавал график как

Код: Выделить всё

@Preview
@Composable
fun NavCreateTest() {
val navController = rememberNavController()

// This NavGraph will be used with NavHost this navHostController will be assigned
val navGraph: NavGraph = remember {
navController.createGraph(
startDestination = RouteC
) {
addNavGraph(navController)
}
}

Column {
/*
NavHost(
modifier = Modifier.fillMaxSize(),
navController = navController,
graph = navGraph,
)
*/
NavHost(
modifier = Modifier.fillMaxSize(),
navController = navController,
startDestination = RouteC
) {
addNavGraph(navController)
}
}
}
Если я устанавливаю RouteC, я получаю следующее исключение

java.lang.IllegalStateException: невозможно найти startDestination
com.packageName.RouteC из NavGraph. Убедитесь, что начальный
NavDestination был добавлен с маршрутом из KClass.

Маршруты и глубокая ссылка

Код: Выделить всё

const val uri = "test://www.example.com"

@Serializable
object RouteA

@Serializable
object RouteB

@Serializable
object RouteC

@Serializable
object RouteD
Я также пробовал условно изменить пункт назначения, если deeplink не равен нулю, поскольку

Код: Выделить всё

val intent: Intent? = (LocalContext.current as? MainActivity)?.intent
val deeplink: Uri? = intent?.data
val isDeeplink = deeplink != null

NavHost(
modifier = Modifier.fillMaxSize(),
navController = navController,
startDestination = if (isDeeplink) RouteC else RouteA
) {
addNavGraph(navController)
}
Также не работало, если я запускал приложение через глубокую ссылку с терминала.

Подробнее здесь: https://stackoverflow.com/questions/791 ... with-jetpa
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Android»