Друкарня від 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, нічого не вийде). Код став читабельнішим, а писати зручніше.

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

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

  • Вітаємо з Різдвом Христовим!

    Друкарня та платформа WE.UA вітають всіх наших читачів та авторів зі світлим святом Різдва! Зичимо всім українцям довгожданого миру, міцного здоровʼя, злагоди, родинного затишку та втілення всього доброго і прекрасного, чого вам побажали колядники!

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

    Різдво
  • Каблучки – прикраси, які варто купувати

    Ювелірні вироби – це не тільки спосіб витратити гроші, але і зробити вигідні інвестиції. Бо вартість ювелірних виробів з кожним роком тільки зростає. Тому купуючи стильні прикраси, ви вигідно вкладаєте кошти.

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

    Як Вибрати Каблучку
  • П'ять помилок у виборі домашнього текстилю, які псують комфорт сну

    Навіть ідеальний матрац не компенсує дискомфорт, якщо текстиль підібрано неправильно. Постільна білизна безпосередньо впливає на терморегуляцію, стан шкіри та глибину сну. Більшість проблем виникає не через низьку якість виробів, а через вибір матеріалів та подальшу експлуатацію

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

    Домашній Текстиль
  • Як знайти житло в Києві

    Переїжджаєте до Києва і шукаєте житло? Дізнайтеся, як орендувати чи купити квартиру, перевірити власника та знайти варіанти, про які зазвичай не говорять.

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

    Агентство Нерухомості
  • Як заохотити дитину до читання?

    Як залучити до читання сучасну молодь - поради та факти. Користь читання для дітей - основні переваги. Розвиток дітей - це наше майбутнє.

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

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

22Прочитань
0Автори
1Читачі
На Друкарні з 15 серпня

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

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

  • Таємниче слово, що змінило все

    Жив собі у великому місті хлопець на ім'я Іван. Він був звичайним офісним працівником, який щодня проводив години у заторах, мріючи про вихідні. Життя здавалось йому нудним і монотонним, поки одного разу, чекаючи на автобус, він не знайшов забутий кимось смартфон.

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

    Мобільні Ігри
  • Made by Google ‘24 - чи змогли здивувати після “зливів”?

    Прийшла та сама пора, коли “корпорація добра” показує нові іграшки. Зазвичай, це відбувається пізніше, та цього року всі кудись поспішають. Тож - приємного читання :)

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

    Google
  • Оновлення до One UI 7 - купа проблем, які не мають рішень

    Вітаю. Це спонтанний довгочит виключно про проблеми нової оболонки смартфонів Samsung. Уточню - тут нема перерахування всіх нових функцій, а лише проблеми, з якими я зіткнувся після оновлення. Можливо, це буде корисно тим, хто вагається перед оновленням. Приємного ознайомлення!

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

    Android

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

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

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

  • Таємниче слово, що змінило все

    Жив собі у великому місті хлопець на ім'я Іван. Він був звичайним офісним працівником, який щодня проводив години у заторах, мріючи про вихідні. Життя здавалось йому нудним і монотонним, поки одного разу, чекаючи на автобус, він не знайшов забутий кимось смартфон.

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

    Мобільні Ігри
  • Made by Google ‘24 - чи змогли здивувати після “зливів”?

    Прийшла та сама пора, коли “корпорація добра” показує нові іграшки. Зазвичай, це відбувається пізніше, та цього року всі кудись поспішають. Тож - приємного читання :)

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

    Google
  • Оновлення до One UI 7 - купа проблем, які не мають рішень

    Вітаю. Це спонтанний довгочит виключно про проблеми нової оболонки смартфонів Samsung. Уточню - тут нема перерахування всіх нових функцій, а лише проблеми, з якими я зіткнувся після оновлення. Можливо, це буде корисно тим, хто вагається перед оновленням. Приємного ознайомлення!

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

    Android