Snackbar

Komponen camilan berfungsi sebagai notifikasi singkat yang muncul di di bagian bawah layar. Dasbor memberikan masukan{i> <i}tentang suatu operasi atau tindakan tanpa mengganggu pengalaman pengguna. Snackbar menghilang setelah beberapa detik. Tujuan pengguna juga dapat menutupnya dengan tindakan, seperti mengetuk tombol.

Pertimbangkan tiga kasus penggunaan ini saat Anda mungkin menggunakan snackbar:

  • Konfirmasi Tindakan: Setelah pengguna menghapus email atau pesan, snackbar muncul untuk mengonfirmasi tindakan dan menawarkan "Undo" sebelumnya.
  • Status Jaringan: Saat aplikasi kehilangan koneksi internet, snackbar muncul untuk mencatat bahwa perangkat sekarang sedang {i>offline<i}.
  • Pengiriman Data: Setelah berhasil mengirimkan formulir atau memperbaruinya {i>, snackbar<i} mencatat bahwa perubahan telah berhasil disimpan.

Contoh dasar

Untuk mengimplementasikan snackbar, Anda harus membuat SnackbarHost terlebih dahulu, yang menyertakan Properti SnackbarHostState. SnackbarHostState memberikan akses ke Fungsi showSnackbar() yang dapat Anda gunakan untuk menampilkan snackbar.

Fungsi penangguhan ini memerlukan CoroutineScope seperti dengan menggunakan rememberCoroutineScope — dan dapat dipanggil sebagai respons terhadap peristiwa UI untuk menampilkan Snackbar dalam 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 dengan tindakan

Anda dapat memberikan tindakan opsional dan menyesuaikan durasi Snackbar. Fungsi snackbarHostState.showSnackbar() menerima parameter actionLabel dan duration tambahan, serta menampilkan 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
}

Anda dapat memberikan Snackbar kustom dengan parameter snackbarHost. Lihat Dokumen referensi API SnackbarHost untuk informasi selengkapnya.