Навигация в многомодульном проекте ComposeAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Навигация в многомодульном проекте Compose

Сообщение Anonymous »

У меня есть multi-module compose Project, в котором я все еще пытаюсь определить как следует сделать навигацию . Насколько я знаю, необходимо принять во внимание следующие ключевые концепции (исправьте меня, если я ошибаюсь): < /p>

[*] Навигация между направлениями верхнего уровня должно управляться в
mainnavgraph. br /> < /li>
vavigation в рамках значения (Br /> meather-screen />managed by the feature itself.

As described in android developers site and NowInAndroid code,

whenever a screen needs to navigate to another, instead of using

navController inside the Screen itself and calling navigate(...)

method, it is better to use callbacks in order to delegate

навигация на Mainnavgraph. С моей точки зрения, вместо

использование основных обратных вызовов мы можем использовать запечатанный класс /интерфейс, чтобы

избегать сотни обратных вызовов, как я показываю вам на картинке. В результате я не знаю, как сделать/решить внутреннюю навигацию. Каждая функция должна иметь функции extExnavigator. AppNavigator должен иметь возможность делегировать функции внутренней навигации по каждому собственному навигатору функций, который будет скрыт от других функций. Проблема, которую я вижу, заключается в том, что каждый навигатор функции должен иметь экземпляр NavController, чтобы сделать навигацию, но тогда мы должны передать его из MainNavgraph/AppNavigator, то, что я думаю, не является хорошим подходом, потому что мы связываем модуль с использованием NavController и будет более сложным для повторного использования модуля в других проектах, как умножение, так и etc. Это?fun NavController.navigateToMap() {
navigate(route = NavigationRoute.Map)
}

fun NavController.navigateToItemDetail(id: Int = Int.negative()) {
navigate(NavigationRoute.ItemDetail(id))
}
fun NavGraphBuilder.homeNavGraph(
onAction: (HomeNavActions) -> Unit
) {
navigation(startDestination = NavigationRoute.Home) {
composable {
HomeSection(
onItemClick = { id ->
onAction(HomeNavActions.ItemDetail(id))
}
)
}
....
}
}
< /code>
mainnavgraph.kt:
@Composable
fun MainNavGraph(
navController: NavHostController = rememberNavController()
) {
Box(
modifier = Modifier.fillMaxSize()
) {
NavHost(navController = navController, startDestination = NavigationGraphs.HomeGraph) {
homeNavGraph { action -> navController.navigateTo(action) }
settingsGraph()
}
}
}
private fun NavHostController.navigateTo(action: HomeNavActions) {
when (action) {
HomeNavActions.Back -> popBackStack()
HomeNavActions.Map -> navigateToMap()
HomeNavActions.Settings -> navigateToSettings()
is HomeNavActions.ToItemDetail -> navigateToItemDetail(action.id)
}
}


Подробнее здесь: https://stackoverflow.com/questions/794 ... se-project
Ответить

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

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

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

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

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