Badge

Gunakan badge untuk menampilkan elemen visual kecil yang menunjukkan status atau nilai numerik pada composable lain. Berikut beberapa skenario umum saat Anda mungkin menggunakan badge:

  • Notifikasi: Menampilkan jumlah notifikasi yang belum dibaca di ikon aplikasi atau lonceng notifikasi.
  • Pesan: Menunjukkan pesan baru atau yang belum dibaca dalam aplikasi chat.
  • Pembaruan status: Menampilkan status tugas, seperti "selesai", "sedang berlangsung", atau "gagal".
  • Jumlah keranjang: Menampilkan jumlah item di keranjang belanja pengguna.
  • Konten baru: Soroti konten atau fitur baru yang tersedia untuk pengguna.
Berbagai contoh komponen badge.
Gambar 1. Contoh badge

Platform API

Gunakan composable BadgedBox untuk menerapkan badge di aplikasi Anda. Pada dasarnya, ini adalah container. Anda dapat mengontrol tampilannya dengan dua parameter utama ini:

  • content: Konten composable yang terdapat dalam BadgedBox. Biasanya Icon.
  • badge: Composable yang muncul sebagai badge di atas konten. Biasanya composable Badge khusus.

Contoh dasar

Cuplikan kode ini menunjukkan implementasi dasar BadgedBox:

@Composable
fun BadgeExample() {
    BadgedBox(
        badge = {
            Badge()
        }
    ) {
        Icon(
            painter = rememberVectorPainter(AppIcons.Mail),
            contentDescription = "Email"
        )
    }
}

Contoh ini menampilkan badge yang tumpang-tindih dengan composable Icon yang disediakan. Perhatikan hal berikut dalam kode:

  • BadgedBox berfungsi sebagai penampung keseluruhan.
  • Argumen untuk parameter badge dari BadgedBox adalah Badge. Karena Badge tidak memiliki argumennya sendiri, aplikasi akan menampilkan badge default, yang berupa lingkaran merah kecil.
  • Icon berfungsi sebagai argumen untuk parameter content dari BadgedBox. Ikon ini adalah ikon tempat badge muncul. Dalam hal ini, ikonnya adalah ikon email.

Berikut tampilannya:

Badge sederhana yang tidak berisi konten.
Gambar 2. Implementasi badge minimal.

Contoh mendetail

Cuplikan berikut menunjukkan cara menampilkan nilai dalam badge yang merespons tindakan pengguna.

@Composable
fun BadgeInteractiveExample() {
    var itemCount by remember { mutableIntStateOf(0) }

    Column(
        verticalArrangement = Arrangement.spacedBy(16.dp)
    ) {
        BadgedBox(
            badge = {
                if (itemCount > 0) {
                    Badge(
                        containerColor = Color.Red,
                        contentColor = Color.White
                    ) {
                        Text("$itemCount")
                    }
                }
            }
        ) {
            Icon(
                painter = rememberVectorPainter(AppIcons.ShoppingCart),
                contentDescription = "Shopping cart",
            )
        }
        Button(onClick = { itemCount++ }) {
            Text("Add item")
        }
    }
}

Contoh ini mengimplementasikan ikon keranjang belanja dengan badge yang menampilkan jumlah item di keranjang pengguna.

  • BadgedBox hanya ditampilkan jika jumlah item lebih dari 0.
  • Argumen untuk containerColor dan contentColor mengontrol tampilan badge.
  • Composable Text untuk slot konten Badge muncul di dalam badge. Dalam hal ini, ikon tersebut menampilkan jumlah item di keranjang.

Implementasi ini akan terlihat seperti berikut:

Implementasi badge yang berisi jumlah item di keranjang belanja.
Gambar 3. Badge yang menampilkan jumlah item di keranjang belanja.

Referensi lainnya