У меня есть 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
Навигация в многомодульном проекте Compose ⇐ Android
Форум для тех, кто программирует под Android
-
Anonymous
1753738990
Anonymous
У меня есть [b]multi-module compose [/b] Project, в котором я все еще пытаюсь определить [b] как следует сделать навигацию [/b]. Насколько я знаю, необходимо принять во внимание следующие ключевые концепции (исправьте меня, если я ошибаюсь): < /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)
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79432399/navigation-in-multi-module-compose-project[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия