Sitemap
Danang Dwi Gusti Fajar Yanto

Danang Dwi Gusti Fajar Yanto

I'm a teacher, graphic designer, and tech enthusiast who loves turning complex ideas into simple, engaging visuals and interactive experiences.

Dart: Future, Async/Await, & Error Handling

3 min readSep 14, 2026

--

Asynchronous Programming dalam Dart, mencakup konsep Future, Async/Await, dan Error Handling, lengkap dengan contoh kasus nyata serta lembar praktiknya.

Press enter or click to view image in full size

1. Konsep Synchronous vs. Asynchronous

  • Synchronous (Sinkron): Kode dijalankan secara berurutan baris demi baris. Jika ada proses yang membutuhkan waktu lama (misalnya download file atau HTTP request ke API), program akan “terkunci” (blocking) sampai proses tersebut selesai.
  • Asynchronous (Asinkron): Proses yang membutuhkan waktu lama dijalankan di latar belakang (background). Program dapat terus mengeksekusi instruksi lain tanpa harus menunggu proses tersebut selesai (non-blocking).

2. Apa itu Future?

Future adalah objek yang mewakili nilai yang belum tersedia saat ini, tetapi akan tersedia di masa mendatang setelah proses asinkron selesai.

Get Danang Dwi Gusti Fajar Yanto’s stories in your inbox

Join Medium for free to get updates from this writer.

Suatu Future memiliki dua status utama:

  1. Uncompleted: Proses masih berjalan di latar belakang.
  2. Completed: Proses telah selesai, menghasilkan salah satu dari dua respon:
  • Data/Value: Proses berhasil.
  • Error: Proses gagal atau mengalami kendala.

3. Menggunakan async dan await

Pasangan kata kunci async dan await membuat penulisan kode asinkron yang kompleks menjadi tampak seperti kode sinkron yang rapi dan mudah dibaca.

  • async: Ditambahkan sebelum badan fungsi ({}) untuk menandakan bahwa fungsi tersebut berjalan secara asinkron dan mengembalikan objek Future.
  • await: Digunakan di dalam fungsi async untuk menghentikan sementara eksekusi baris berikutnya sampai Future yang dipanggil selesai memberikan nilai.
// Definisi fungsi asinkron
Future<String> ambilDataUser() async {
// Simulasi delay 2 detik
await Future.delayed(Duration(seconds: 2));
return "Data User: Hades Demara";
}

void main() async {
print("Mengambil data...");
String data = await ambilDataUser(); // Menunggu proses selesai
print(data);
}

4. Error Handling (try-catch-finally)

Proses asinkron seperti pemanggilan API sering kali berisiko gagal (misal: koneksi internet terputus atau server eror). Penanganan eror (Error Handling) wajib dilakukan agar aplikasi tidak hancur (crash).

Sintaks yang digunakan:

  • try: Membungkus blok kode asinkron yang berpotensi menghasilkan eror.
  • catch (e): Menangkap dan mengelola eror yang terjadi.
  • finally: Blok kode yang pasti dieksekusi di akhir, baik proses berhasil maupun gagal (sangat cocok untuk menutup loading indicator atau koneksi database).
try {
String data = await ambilDataAPI();
print(data);
} catch (e) {
print("Gagal mengambil data: $e");
} finally {
print("Proses selesai.");
}

5. Lembar Praktik Kode (Code Practice)

Salin dan jalankan kode Dart di bawah ini untuk melihat simulasi pengambilan data API dan penanganan eror secara nyata.

// Simulasi fungsi mengambil profil dari server (Berhasil)
Future<Map<String, dynamic>> fetchUserProfile() async {
print("1. [API] Meminta data profil user dari server...");

// Simulasi network delay selama 2 detik
await Future.delayed(const Duration(seconds: 2));

// Simulasi respon JSON dari API
return {
'id': 'USR-101',
'username': 'hades_demara',
'role': 'Music Producer & Dev',
};
}

// Simulasi fungsi request data yang gagal (Mengembalikan Error)
Future<String> fetchSensitiveData(bool isConnected) async {
print("2. [API] Meminta data rahasia...");
await Future.delayed(const Duration(seconds: 1));

if (!isConnected) {
// Lempar exception jika jaringan terputus
throw Exception("Koneksi terputus! Gagal terhubung ke server.");
}

return "Data Rahasia Terbuka";
}

void main() async {
print("=== MULAI PROGRAM ===");

// 1. Eksekusi Asinkron Berhasil
try {
Map<String, dynamic> user = await fetchUserProfile();
print("-> SUKSES: Halo ${user['username']}! Role: ${user['role']}\n");
} catch (error) {
print("-> ERROR: Terjadi kesalahan: $error\n");
}

// 2. Eksekusi Asinkron dengan Handling Error & Finally
try {
// Parameter false mensimulasikan jaringan terputus
String data = await fetchSensitiveData(false);
print("-> RESULT: $data");
} catch (error) {
print("-> CATCH: Ditemukan masalah -> $error");
} finally {
print("-> FINALLY: Menutup koneksi/Selesai membersihkan memori.\n");
}

print("=== PROGRAM SELESAI ===");
}

Terimakasih sampai jumpa di materi Selanjutnya :)

--

--

Danang Dwi Gusti Fajar Yanto
Danang Dwi Gusti Fajar Yanto

I'm a teacher, graphic designer, and tech enthusiast who loves turning complex ideas into simple, engaging visuals and interactive experiences.