У меня есть multi-module compose Project, в котором я все еще пытаюсь определить как следует сделать навигацию . Насколько я знаю, необходимо принять во внимание следующие ключевые понятия (поправьте меня, если я ошибаюсь): < /p>
Навигация между вершиной- Уровень направления должны управляться в
mainnavgraph.
< /li>
Навигация между экранами в функции (модуль) должна быть
управляется самой функцией. < /p>
< /li>
, как описано на сайте Android Developers и Nowinandroid,
Всякий раз, когда экран должен перейти к другому, вместо того, чтобы использовать
NavController внутри самого экрана и вызовов навигации (...)
метод лучше использовать обратные вызовы в Закажите, чтобы делегировать навигацию
к Mainnavgraph. С моей точки зрения, вместо
с использованием основных обратных вызовов мы можем использовать герметичный класс /интерфейс, чтобы
Избегайте сотни обратных вызовов, как я показываю на картинке . < /p>
< /li>
< /ul>
Проблема в том, что я чувствую, что тогда каждый экран доступен повсюду, и это против модуляризации подход. В результате я не знаю, как сделать/решить внутреннюю навигацию по признаку. appnavigator. Каждая функция должна иметь функции extExnavigator. AppNavigator должен иметь возможность делегировать функции внутренней навигации по каждому собственному навигатору функций, который будет скрыт от других функций. Проблема, которую я вижу, заключается в том, что каждый навигатор функции должен иметь экземпляр NavController, чтобы сделать навигацию, но тогда мы должны пройти его из MainNavgraph/AppNavigator, то, что я думаю, не является хорошим подходом, потому что тогда мы связываем модуль Чтобы использовать NavController, и будет труднее повторно использовать модуль в других проектах, таких как Multiplatform и т. Д. > В моем текущем коде я думаю, что только NavigateTosettings должны быть доступны для всех, другие (для карты, для деталей и т. Д.) Следует управлять и видимы только в рамках функции ... < /p>
Homenavigation.kt: < /p>
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
1739349462
Anonymous
У меня есть [b]multi-module compose [/b] Project, в котором я все еще пытаюсь определить [b] как следует сделать навигацию [/b]. Насколько я знаю, необходимо принять во внимание следующие ключевые понятия (поправьте меня, если я ошибаюсь): < /p>
Навигация между вершиной- Уровень направления должны управляться в
mainnavgraph.
< /li>
Навигация между экранами в функции (модуль) должна быть
управляется самой функцией. < /p>
< /li>
, как описано на сайте Android Developers и Nowinandroid,
Всякий раз, когда экран должен перейти к другому, вместо того, чтобы использовать
NavController внутри самого экрана и вызовов навигации (...)
метод лучше использовать обратные вызовы в Закажите, чтобы делегировать навигацию
к Mainnavgraph. С моей точки зрения, вместо
с использованием основных обратных вызовов мы можем использовать герметичный класс /интерфейс, чтобы
Избегайте сотни обратных вызовов, как я показываю на картинке . < /p>
< /li>
< /ul>
[b] Проблема в том, что я чувствую, что тогда каждый экран доступен повсюду, и это против модуляризации подход. [/b] В результате я не знаю, как сделать/решить внутреннюю навигацию по признаку. appnavigator. Каждая функция должна иметь функции extExnavigator. AppNavigator должен иметь возможность делегировать функции внутренней навигации по каждому собственному навигатору функций, который будет скрыт от других функций. Проблема, которую я вижу, заключается в том, что каждый навигатор функции должен иметь экземпляр NavController, чтобы сделать навигацию, но тогда мы должны пройти его из MainNavgraph/AppNavigator, то, что я думаю, не является хорошим подходом, потому что тогда мы связываем модуль Чтобы использовать NavController, и будет труднее повторно использовать модуль в других проектах, таких как Multiplatform и т. Д. > В моем текущем коде я думаю, что только NavigateTosettings должны быть доступны для всех, другие (для карты, для деталей и т. Д.) Следует управлять и видимы только в рамках функции ... < /p>
Homenavigation.kt: < /p>
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антехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия