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

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

Сообщение Anonymous »

У меня есть 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
Ответить

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

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

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

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

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