Привет! Возьмите свой кофе ☕️ и узнайте, как вернуться назад с данными в Jetpack Compose.

Зависимость

Прежде всего, давайте добавим зависимость в файл :app/build.gradle.kts.

dependencies {
    implementation("androidx.navigation:navigation-compose:2.6.0")
}

Настройка навигации

Откройте MainActivity.kt и давайте создадим navController, NavHost и экраны.

class MainActivity : ComponentActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            ContentTheme {
                val navController = rememberNavController()

                NavHost(navController = navController, startDestination = "first") {
                    composable("first") {
                        // ...
                    }

                    composable("second") {
                        // ...  
                    }
                }
            }
        }
    }
}

Реализация первого экрана

Здесь мы будем использовать NavBackStackEntry . Это позволяет нам получить доступ к SavedStateHandle и получить сообщение.

SavedStateHandle — позволяет сохранять и восстанавливать данные.

composable("first") { entry ->
    val message = entry.savedStateHandle.get<String>("message")
    Column {
        Text(text = message.orEmpty())
        Button(
            onClick = {
                navController.navigate("second")
            }
        ) {
            Text(text = "Next screen")
        }
    }
}

Реализация второго экрана

Когда мы вернемся назад, мы будем использовать previousBackStackEntry из navController. Это позволяет нам устанавливать значения в SavedStateHandle .

composable("second") {
    Button(
        onClick = {
            navController.previousBackStackEntry
                ?.savedStateHandle
                ?.set("message", "Hello World!")
            navController.popBackStack()
        }
    ) {
        Text(text = "Navigate back with message")
    }
}


Я надеюсь, что эта статья помогла вам в вашем развитии. Не забудьте оставаться в курсе моих последних материалов, следуя за мной и подписавшись на информационный бюллетень. Спасибо за чтение!

Я также веду канал YouTube, посвященный разработке Android, где делюсь информативным контентом. Если вам интересно расширить свои знания в этой области, обязательно подпишитесь на мой канал.