Как выбрать навигацию для KMM проектов на Kotlin

Как выбрать навигацию для KMM проектов на Kotlin

1. Voyager

Описание:

Voyager — легковесная библиотека навигации для Compose, разработанная специально для мультиплатформенных проектов (Android, Desktop, iOS). Она использует концепцию моделей экранов (Screen model), что упрощает управление состоянием и параметрами.

Плюсы Voyager:

• ✅ Поддержка KMM (Kotlin Multiplatform), включая Android и Desktop.

• ✅ Простая и декларативная API с поддержкой Screen-based навигации.

• ✅ Встроенная работа с ViewModel (через getModel()), что удобно для управления состоянием.

• ✅ Автоматическое сохранение состояния экранов (similar to rememberSaveable).

• ✅ Поддержка анимаций между экранами.

• ✅ Хорошо документирована и активна в сообществе.

Минусы Voyager:

• ❌ Ограниченная гибкость для сложных проектов (не хватает сложных маршрутов, вложенной навигации).

• ❌ Сложнее кастомизировать переходы по сравнению с Decompose.

• ❌ Для очень сложных приложений может потребоваться дополнительная архитектурная работа.

Лучшее применение:

Маленькие Android-приложения с простыми требованиями к навигации.

Одноплатформенные приложения, где не требуется KMM.

Новичкам, которые хотят быстро настроить навигацию.


2. Decompose

Описание:

Decompose — это мощная библиотека для мультиплатформенной навигации, основанная на концепции Component-based подхода. Она позволяет легко управлять экранами и их состоянием, а также поддерживает child components, что удобно для сложных приложений.

Плюсы Decompose:

• ✅ Полноценная поддержка Android, Desktop, iOS, Web.

• ✅ Поддержка вложенной навигации (child components) и модульности.

• ✅ Возможность реализации сложных навигационных графов и архитектур (MVI, MVVM).

• ✅ Автоматическое управление жизненным циклом компонентов.

• ✅ Поддержка сохранения состояния (state preservation).

• ✅ Возможность глубокой интеграции с архитектурными паттернами (например, с Kotlin Coroutines, Flow).

Минусы Decompose:

• ❌ Более сложное API по сравнению с Voyager, требует понимания компонентного подхода.

• ❌ Большой объем кода для простых приложений.

• ❌ Меньше документации по сравнению с конкурентами, но активно развивается.

Лучшее применение:

• Средние и большие приложения, требующие сложной вложенной навигации.

• Мультиплатформенные проекты с акцентом на масштабируемость.

• Проекты с сложной архитектурой и динамической навигацией.


3. Tiamat

Описание:

Tiamat — это экспериментальная и пока менее популярная библиотека, ориентированная на навигацию в Jetpack Compose с упором на Android. Она предлагает простую реализацию навигационного стека с управлением состоянием.

Плюсы Tiamat:

• ✅ Простая в использовании и легковесная.

• ✅ Хорошо интегрируется с ViewModel и state management.

• ✅ Подходит для простых Android-приложений без сложных переходов.

• ✅ Минимальная зависимость и простота добавления в проект.

Минусы Tiamat:

• ❌ Нет поддержки Desktop и других платформ.

• ❌ Ограниченный функционал для сложных навигационных графов.

• ❌ Слабая документация и меньшая популярность в сообществе.

Лучшее применение:

• Маленькие Android-приложения с простыми требованиями к навигации.

• Одноплатформенные приложения, где не требуется KMM.

• Новичкам, которые хотят быстро настроить навигацию.


Вывод: какую библиотеку выбрать?

Критерий

Voyager

Decompose

Tiamat

JetBrains Navigation
alpha-version

Jetpack Compose Navigation (Google)

Поддержка Desktop

✅ Да

✅ Да

❌ Нет

✅ Да

❌ Нет

Легкость освоения

✅ Простая

❌ Сложнее

✅ Очень простая

✅ Простая

✅ Простая

Гибкость

❌ Ограниченная

✅ Высокая

❌ Низкая

✅ Средняя

✅ Средняя

Поддержка KMM

✅ Полная

✅ Полная

❌ Только Android

✅ Полная

❌ Нет

Размер проекта

Малые/средние

Средние/большие

Маленькие

Маленькие/Средние

Средние/большие

Сохранение состояния

✅ Да

✅ Да

❌ Нет

❌ Нет

❌ Нет

Навигация

Screen-based/Stack-based/Component-based (частично)

Component-based

Stack-based

Screen-based

Screen-based

Рекомендации:

1. Для маленьких приложений (3-5 экранов):

• Лучше использовать Voyager, так как он прост в настройке и отлично работает на Android и Desktop.

• Если приложение только для Android, можно попробовать Tiamat.

2. Для средних и крупных приложений:

• Лучше выбрать Decompose, так как он обеспечивает мощные инструменты для сложной навигации и вложенных экранов.

• Особенно полезен в крупных KMM-проектах.

3. Если нужно только Android:

• Voyager или Tiamat — простые и легкие решения.

• Decompose только если проект действительно сложный.

Заключение

• Если ваш проект многоэкранный, мультиплатформенный и масштабируемый, лучше выбрать Decompose, так как он предлагает гибкость и контроль.

• Если проект простой и KMM, выбирайте Voyager, он быстрее в освоении и удобен в небольших проектах.

• Если проект чисто для Android, Tiamat — минималистичный и легковесный вариант.

Все статьи

Другие статьи

Смотреть все