Закуски в номере

Уведомление – это краткое сообщение, которое появляется в нижней части экрана. Они сообщают о результатах операции или действия, не прерывая работу пользователя. Снекбары исчезают через несколько секунд. Пользователь также может закрыть их, выполнив определенное действие, например нажав кнопку.

Рассмотрим три примера использования уведомлений:

  • Подтверждение действия. После того как пользователь удалит письмо или сообщение, появится уведомление с подтверждением действия и кнопкой Отменить.
  • Статус сети. Если приложение теряет подключение к интернету, появляется снекбар с уведомлением о том, что оно перешло в офлайн-режим.
  • Отправка данных. После успешной отправки формы или обновления настроек в нижней части экрана появляется уведомление о том, что изменения сохранены.
Примеры компонентов интерфейса snackbar.
Рисунок 1. Примеры уведомлений.

Простой пример

Чтобы реализовать снекбар, сначала создайте SnackbarHost, который включает свойство SnackbarHostState. SnackbarHostState предоставляет доступ к функции showSnackbar(), которую можно использовать для показа снекбара.

Для этой функции приостановки требуется CoroutineScope, например возвращаемый функцией rememberCoroutineScope. Ее можно вызывать в ответ на события интерфейса, чтобы показать Snackbar в Scaffold.

val scope = rememberCoroutineScope()
val snackbarHostState = remember { SnackbarHostState() }
Scaffold(
    snackbarHost = {
        SnackbarHost(hostState = snackbarHostState)
    },
    floatingActionButton = {
        ExtendedFloatingActionButton(
            text = { Text("Show snackbar") },
            icon = { Icon(Icons.Filled.Image, contentDescription = "") },
            onClick = {
                scope.launch {
                    snackbarHostState.showSnackbar("Snackbar")
                }
            }
        )
    }
) { contentPadding ->
    // Screen content
}

Всплывающее уведомление с действием

Вы можете указать необязательное действие и настроить длительность Snackbar. Функция snackbarHostState.showSnackbar() принимает дополнительные параметры actionLabel и duration и возвращает SnackbarResult.

val scope = rememberCoroutineScope()
val snackbarHostState = remember { SnackbarHostState() }
Scaffold(
    snackbarHost = {
        SnackbarHost(hostState = snackbarHostState)
    },
    floatingActionButton = {
        ExtendedFloatingActionButton(
            text = { Text("Show snackbar") },
            icon = { Icon(Icons.Filled.Image, contentDescription = "") },
            onClick = {
                scope.launch {
                    val result = snackbarHostState
                        .showSnackbar(
                            message = "Snackbar",
                            actionLabel = "Action",
                            // Defaults to SnackbarDuration.Short
                            duration = SnackbarDuration.Indefinite
                        )
                    when (result) {
                        SnackbarResult.ActionPerformed -> {
                            /* Handle snackbar action performed */
                        }
                        SnackbarResult.Dismissed -> {
                            /* Handle snackbar dismissed */
                        }
                    }
                }
            }
        )
    }
) { contentPadding ->
    // Screen content
}

Вы можете указать специальный параметр Snackbar с помощью параметра snackbarHost. Подробная информация приведена в справочной документации по API SnackbarHost.

Основные положения

  • actionLabel = "Action" – задает текст командной кнопки.
  • duration = SnackbarDuration.Indefinite – панель будет показываться, пока пользователь или программа не закроет ее.
  • SnackbarResult.ActionPerformed – пользователь нажал командную кнопку в уведомлении.
  • SnackbarResult.Dismissed – пользователь закрыл снекбар, не нажав командную кнопку.