Друкарня від WE.UA

Нова навігація в Jetpack compose на android

Від 4 вересня 2024 року, коли вийшло оновлення 2.8.0, робити навігацію з передачею параметрів між екранами в jetpack compose стало набагато простіше. А також зручніше і зрозуміліше

Раніше, щоб передати параметр з одного екрану на інший, потрібно було провести такі дії. На першому екрані передати щось на зразок цього:

Button(
    onClick = {
        navController.navigate("detail_screen/$text")
    }               
) 

А якщо їх 2, 3? А якщо іноді він є, іноді немає?

Далі було цікавіше, цей параметр треба було прийняти, упакувати в список аргументів, і тут же дістати, визначити тип і аж тоді передати на наступний екран.

 NavHost(navController = navController, startDestination = "input_screen") {
        
    ...

    composable(
         "detail_screen/{inputText}",
         arguments = listOf(navArgument("inputText") {
             type = NavType.StringType
             })
    ) { backStackEntry ->
        val inputText = backStackEntry.arguments?.getString("inputText") ?: ""
        SecondScreen(inputText)
    }

По суті, якщо вам було потрібно передавати data class як параметр, його потрібно було серіалізувати в json з допомогою будь-якого серіалізатора, а на іншому боці провести зворотні дії. Це було не так складно, але виглядало наче щось десь робиться не через те місце.


Роути:

//Було 

const val FIRST = "first"
const val SECOND = "second/{parameter}"

// Стало

@Serialisable
data object First

@Serialisable
data class Second(val parameter:T)

На стороні екрану

Button(
    onClick = {
        navController.navigate(Second(parameter)
    }               
)


На стороні NavHost

//якщо треба передати на екран
NavHost(navController = navController, startDestination = First) {

    composable<Second>{ backStackEntry ->
        val parameter = backStackEntry.toRoute<Second>().parameter
        SecondScreen(parameter)
    }
}

//якщо треба передати у в'юмодель
NavHost(navController = navController, startDestination = First) {

    composable<Second>{
        SecondScreen()
    }
}


clas SecondViewModel(savedStateHandle: SavedStateHandle):ViewModel(){

    val parameter = savedStateHandle.toRoute<Second>().parameter
}

При такому підході параметр ви отримуєте гарантовано. Додатково перевіряти його на null не потрібно, а можна одразу використовувати.

Об’єм даних, що можна передавати обмежений розміром bundle і досі становить 1 Мb. У параметри data calass`ів можна передавати дані стандартних типів та їх списки. Звісно, можна і кастомні, але складно, і в більшості випадків, не має необхідності.

То ж, що у нас у підсумку. Що змінилось? По суті - нічого. Але серіалізацію-десеріалізацію заховали “під капот” ( тепер треба використовувати kotlin serialisation, нічого не вийде). Код став читабельнішим, а писати зручніше.

Ви вже спробували оновлення? Поділіться враженнями

Статті про вітчизняний бізнес та цікавих людей:

  • Чохли для iPhone 15: повний гід по кольорах, матеріалах і виробниках

    Перед тим як вибрати чохли для iPhone 15, варто визначитися, що саме ви хочете отримати від аксесуара. Комусь потрібен тонкий прозорий корпус, інший покупець шукає посилений захист, а для когось вирішальним стане колір або підтримка MagSafe

    Теми цього довгочиту:

    Чохли Для Iphone
  • Як побудована програма Meest China Academy

    Курс про товарний бізнес охоплює різні етапи роботи: від пошуку ідеї до перевірки товару, логістики та масштабування. Програма Meest China Academy містить 17 модулів, які послідовно розкривають ці теми без зведення всього навчання до однієї універсальної поради.

    Теми цього довгочиту:

    Meest
  • Які технології використані в Айфон 17

    Айфон 17 поєднує OLED-дисплей із частотою до 120 Гц, чип A19, дві камери Fusion 48 Мп і швидке заряджання через USB-C. У COMFY можна купити Айфон 17 з накопичувачем на 256 або 512 ГБ, вибравши конфігурацію відповідно до обсягу фото, відео та застосунків

    Теми цього довгочиту:

    Iphone 17
  • Як вибрати вживаний iPhone: коротке керівництво для розумної покупки

    Вторинний ринок смартфонів Apple активно зростає, і питання, як вибрати вживаний iPhone, стає актуальним для дедалі більшої кількості користувачів. Правильний підхід дозволяє отримати бу iPhone з актуальною iOS і доброю камерою за помітно нижчу ціну, ніж у нових пристроїв.

    Теми цього довгочиту:

    Iphone
  • Як подолати жіночу безплідність за допомогою донорських яйцеклітин

    Діагноз "безпліддя" рідко звучить як вирок одразу. Для багатьох жінок саме в цей момент вперше звучить словосполучення "донорські яйцеклітини" — і це часто не кінець шляху до материнства, а якраз новий, реальний шанс.

    Теми цього довгочиту:

    Донорство
Поділись своїми ідеями в новій публікації.
Ми чекаємо саме на твій довгочит!
Євгеній Маслак
Євгеній Маслак@maslak

2Довгочити
45Перегляди
1Підписники
На Друкарні з 15 серпня 2024

Більше від автора

Це також може зацікавити:

Коментарі (0)

Підтримайте автора першим.
Напишіть коментар!

Це також може зацікавити: