Sebaiknya kita mulai

dari mana?

Bikin UI Chat ala WhatsApp Tema Biru

 


Membuat Tampilan Chat ala WhatsApp Tema Biru

Sekarang, mari kita ubah kode default tadi menjadi antarmuka daftar percakapan (*Chat List*) yang mirip seperti WhatsApp, namun menggunakan aksen warna **Biru**.

Ganti seluruh isi kode di file `ContentView.swift` kamu dengan kode berikut:


import SwiftUI


// 1. Model Data sederhana untuk item Chat

struct ChatMessage: Identifiable {

    let id = UUID()

    let name: String

    let message: String

    let time: String

    let unreadCount: Int

    let imageName: String

}


struct ContentView: View {

    // Data dummy untuk daftar percakapan

    let chats = [

        ChatMessage(name: "Tim Cook", message: "Proyek SwiftUI baru udah selesai?", time: "10:45", unreadCount: 2, imageName: "person.crop.circle.fill"),

        ChatMessage(name: "Komunitas iOS ID", message: "Agung: Halo semuanya, salam kenal!", time: "09:12", unreadCount: 5, imageName: "person.3.sequence.fill"),

        ChatMessage(name: "Sarah Swift", message: "Besok ada jadwal webinar jam 7 malam ya.", time: "Kemarin", unreadCount: 0, imageName: "person.crop.circle"),

        ChatMessage(name: "Developer Team", message: "Build 17F113 sudah siap di-test.", time: "Kemarin", unreadCount: 0, imageName: "gearshape.2.fill")

    ]

    

    var body: some View {

        NavigationStack {

            List(chats) { chat in

                HStack(spacing: 12) {

                    // Foto Profil Avatar

                    Image(systemName: chat.imageName)

                        .resizable()

                        .scaledToFit()

                        .frame(width: 48, height: 48)

                        .foregroundColor(.blue) // Warna Biru untuk Ikon

                        .background(Color.blue.opacity(0.1))

                        .clipShape(Circle())

                    

                    // Detail Nama & Pesan

                    VStack(alignment: .leading, spacing: 4) {

                        HStack {

                            Text(chat.name)

                                .font(.headline)

                                .foregroundColor(.primary)

                            Spacer()

                            Text(chat.time)

                                .font(.subheadline)

                                .foregroundColor(chat.unreadCount > 0 ? .blue : .gray)

                        }

                        

                        HStack {

                            Text(chat.message)

                                .font(.subheadline)

                                .foregroundColor(.gray)

                                .lineLimit(1)

                            Spacer()

                            

                            // Badge Pesan Belum Dibaca

                            if chat.unreadCount > 0 {

                                Text("\(chat.unreadCount)")

                                    .font(.caption)

                                    .fontWeight(.bold)

                                    .foregroundColor(.white)

                                    .padding(6)

                                    .background(Color.blue) // Accent Biru

                                    .clipShape(Circle())

                            }

                        }

                    }

                }

                .padding(.vertical, 4)

            }

            .listStyle(.plain)

            .navigationTitle("Pesan") // Judul Navigation Bar

            .toolbar {

                ToolbarItem(placement: .navigationBarTrailing) {

                    Button(action: {}) {

                        Image(systemName: "square.and.pencil")

                            .foregroundColor(.blue)

                    }

                }

            }

        }

    }

}


#Preview {

    ContentView()

}



Penjelasan Singkat Kode Baru:

  • ChatMessage (Struct Data): Wadah untuk menampung informasi seperti nama pengirim, isi pesan, waktu, jumlah pesan belum dibaca, dan nama ikon.

  • NavigationStack: Menyediakan bilah navigasi (Navigation Bar) di bagian atas layar dengan judul "Pesan" dan tombol aksi di pojok kanan.

  • List: Komponen untuk membuat tampilan daftar berulang (scrollable list), mirip seperti daftar obrolan di WhatsApp.

  • HStack (Horizontal Stack): Menyusun elemen secara menyamping (dari kiri ke kanan), yaitu foto profil di sebelah kiri dan teks detail di sebelah kanan.

  • Aksen Warna Biru (Color.blue): Menggantikan warna hijau khas WhatsApp dengan warna biru khas tema iOS native, digunakan pada badge unread message, ikon profil, dan tombol header.