Dasar Dart: Future & async/await
Memahami pekerjaan yang butuh waktu, Future, async/await, dan menangani kegagalan dengan try/catch.
Pekerjaan yang butuh waktu
Sebagian pekerjaan tidak selesai seketika: mengambil data dari internet, membaca file, atau menunggu database. Jika aplikasi berhenti menunggu, layar akan membeku. Dart menyelesaikannya dengan Future: "janji" bahwa hasilnya akan datang nanti.
Analogi: kamu memesan makanan di restoran. Pelayan memberi nomor antrean (Future). Kamu tidak berdiri di dapur; kamu menunggu sambil duduk (aplikasi tetap responsif), lalu makanannya datang.
Function yang mengembalikan Future
Future<String> ambilNama() async {
await Future.delayed(const Duration(seconds: 1)); // pura-pura menunggu 1 detik
return 'Sari';
}
Future<String>= "janji yang berisi String". Tipe di dalam < > adalah jenis hasilnya.async= tanda bahwa function ini boleh menunggu di dalamnya.await= "tunggu sampai hasil ini selesai, lalu lanjut". Hanya boleh dipakai di dalam functionasync.
Memakai hasil Future
Future<void> main() async {
print('Mulai');
final nama = await ambilNama(); // menunggu 1 detik
print('Halo, $nama'); // dijalankan setelah nama tersedia
}
Tanpa await, variabel nama hanya berisi "janji", bukan teks "Sari". Itu kesalahan yang sangat umum. Future<void> dipakai untuk function async yang tidak mengembalikan nilai.
Bagaimana kalau gagal?
Future bisa berakhir dengan error (misalnya internet putus). Tangkap dengan try/catch:
Future<void> gagal() async {
throw Exception('koneksi putus');
}
try {
await gagal();
} catch (e) {
print('Error: $e');
}
throw melempar error; catch menangkapnya sehingga aplikasi tidak crash dan kamu bisa menampilkan pesan yang ramah.