Forwarded from Android Broadcast (Кирилл Розов)
Руководство (EN, 4 мин) как использовать Jetpack Compose Navigation и Dagger 2 с отложенной (ленивой) инициализацией модулей
#compose #dagger #navigation
#compose #dagger #navigation
Новая библиотека для навигации в Compose - Nibel. Библиотека не базируется на магических строках, а всё строго типизировано и можно переходить от Fragment в Compоsable и обратно
📝 Статья с обзором библиотеки (10 мин)
#navigation #android
📝 Статья с обзором библиотеки (10 мин)
#navigation #android
Forwarded from Mobile Compose
#Video #Compose #Navigation
Декларативная архитектура и навигация с Decompose
Доклад c весеннего сезона Mobius 2023 от Алексея Панова, в котором он рассказывает про декларативную архитектуру и навигацию, а также на реальном примере показывает, как всё это интегрировать в проект с помощью библиотеки Decompose.
Декларативная архитектура и навигация с Decompose
Доклад c весеннего сезона Mobius 2023 от Алексея Панова, в котором он рассказывает про декларативную архитектуру и навигацию, а также на реальном примере показывает, как всё это интегрировать в проект с помощью библиотеки Decompose.
YouTube
Алексей Панов, Контур — Декларативная архитектура и навигация с Decompose
Подробнее о конференции Mobius: https://jrg.su/ojGU3B
— —
В современных мобильных приложениях декларативный подход все чаще вытесняет императивный. Вы, наверняка, слышали о плюсах использования однонаправленного потока данных или о преимуществах декларативных…
— —
В современных мобильных приложениях декларативный подход все чаще вытесняет императивный. Вы, наверняка, слышали о плюсах использования однонаправленного потока данных или о преимуществах декларативных…
В Navigation 2.8.0-alpha05 начали работу над type safe аргументами навигации на основе KotlinX Serialization
#navigation @compose_broadcast
#navigation @compose_broadcast
Forwarded from Android Broadcast
🛠 Значительные переработки под капотом для улучшения поддержки KMP
👉 Добавлена поддержка обработки deep link из Kotlin Common кода
👉 Улучшения API
#jetpack #jetpackupdate #navigation #compose #kmp
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Android Broadcast
Media is too big
VIEW IN TELEGRAM
Месяц назад Google анонсировала навигацию специально разработанную под Compose и которая должна решить все боли. В видео показываю её возможности, делюсь своим мнение и рассказываю про недочеты, которые надеюсь что решат до стабильного релиза
#AndroidBroadcast #navigation #jetpack #compose
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥 Jetpack Navigation 3 теперь мультиплатформенная!
В релизе 1.0.0-alpha08 добавили поддержку множества новых KMP-таргетов для runtime-артефакта. Теперь библиотека работает на:
👉 JVM → Android и Desktop
👉 Native → Linux, iOS, watchOS, macOS, MinGW
👉 Web → JavaScript и WasmJS
Для UI-артефакта (где лежат Composable-функции) пока поддержка осталась только у Jetpack Compose.
Ждём появления отдельного артефакта для⚙️ Compose Multiplatform от JetBrains
#compose #kmp #navigation
В релизе 1.0.0-alpha08 добавили поддержку множества новых KMP-таргетов для runtime-артефакта. Теперь библиотека работает на:
👉 JVM → Android и Desktop
👉 Native → Linux, iOS, watchOS, macOS, MinGW
👉 Web → JavaScript и WasmJS
Для UI-артефакта (где лежат Composable-функции) пока поддержка осталась только у Jetpack Compose.
Ждём появления отдельного артефакта для
#compose #kmp #navigation
Please open Telegram to view this post
VIEW IN TELEGRAM
Navigation3 - это новая библиотека навигации, которую писали под Compose. В центре - состояние Backstack в core библиотеке, а дополнительно написаное удобное API для использования в Compose UI.
Я уже делал подробный
#compose #navigation
Please open Telegram to view this post
VIEW IN TELEGRAM
Да, у нас уже есть Jetpack Navigation 3 с официальной поддержкой KMP. Тем не менее авторы Kompass смотрят на проблему иначе, и идея тут любопытная.
Суть в том, что вся навигация строится на чистых редукторах. Любой переход — это
State + Command → State, без побочных эффектов. Вот как это выглядит в коде:// Граф описывает, какие экраны в нём живут и как рендерятся
class MainNavigationGraph : NavigationGraph {
override fun canResolveDestination(id: String) =
id in setOf("home", "profile")
@Composable
override fun Content(entry: BackStackEntry, destination: Destination, navController: NavController) {
when (destination) {
is MainDestination.Home -> HomeScreen(navController)
is MainDestination.Profile -> ProfileScreen(navController)
}
}
}
// Хост принимает список графов и рендерит текущий экран
@Composable
fun AppNavigation() {
val navController = rememberNavController(
startDestination = MainDestination.Home
)
KompassNavigationHost(
navController = navController,
graphs = persistentListOf(MainNavigationGraph())
)
}
// Навигация из экрана
navController.navigate(
entry = BackStackEntry(destinationId = "profile", scopeId = newScope())
)
// Возврат с результатом
navController.pop(result = ProfileResult(userId = "123"))
NavigationState и BackStackEntry иммутабельны, поэтому всю навигацию можно покрыть обычными unit-тестами без инструментации: создаёшь NavigationHandler, кидаешь команду, проверяешь стейт.Особенности:
👉 Таргеты — Android, iOS, Desktop (JVM).
👉 Scopes вместо ViewModel.
rememberScoped<T> живёт ровно пока BackStackEntry в стеке, автоматически чистится при pop.👉 Multi-graph. Несколько независимых графов с собственными лейаутами. Из коробки есть поддержка master-detail для планшетов.
👉 Дип-линки. Через
DeepLinkHandler — типизированный парсинг URI в NavigationCommand.🛠 Библиотека ещё в активной разработке
#KMP #ComposeMultiplatform #Navigation #Kotlin #AndroidDev
Please open Telegram to view this post
VIEW IN TELEGRAM