Pemrograman asinkron (asynchronous programming) di Dart adalah salah satu fitur penting yang memungkinkan aplikasi tetap responsif, terutama saat menghadapi operasi yang memakan waktu, seperti pengambilan data dari internet, membaca file, atau melakukan komputasi yang berat. Dart menyediakan dua komponen utama untuk menangani operasi asinkron: Future
dan Stream
.
1. Future
Future
merepresentasikan nilai tunggal yang tersedia di masa depan, biasanya setelah operasi async selesai. Misalnya, mengambil data dari internet, membaca file, atau delay tertentu.
Future<String> fetchData() async {
await Future.delayed(Duration(seconds: 2));
return "Data berhasil diambil!";
}
-
Cara menggunakan Future
Ada dua cara untuk menggunkan future
yang pertama dengan await
.
void getData() async {
print("Memulai pengambilan data...");
String data = await fetchData();
print(data);
}
Dengan await
kita harus menambahkan async
di depan fungsi, menggunakan await
juga lebih mudah di baca.
Lalu yang kedua dengan then
void getData() {
print("Memulai pengambilan data...");
fetchData().then((data) {
print(data);
}).catchError((e) {
print("Terjadi error: $e");
});
}
Menggunakan then
ini lebih klasik.
2. Stream
Stream
digunakan untuk menangani serangkaian data/event yang datang secara berurutan dari waktu ke waktu, Misalnya:
-
Input dari user
-
Sensor data
-
Data real-time (chat, notifikasi)
-
Response WebSocket
Contoh membuat stream
Stream<int> countNumbers(int max) async* {
for (int i = 1; i <= max; i++) {
await Future.delayed(Duration(seconds: 1));
yield i; // Mengirim nilai ke stream
}
}
Cara memanggil menggunakan listen()
countNumbers(5).listen((number) => print(number));
// Output: 1, 2, 3, 4, 5 (per 1 detik)
Cara memanggil menggunakan async
/await for
void main() async {
await for (int number in countNumbers(3)) {
print("Angka: $number");
}
}
3. Perbedaan Future vs Stream
Fitur |
Future |
Stream |
Nilai |
Single value (1x) |
Multiple values (berkelanjutan) |
Contoh |
Fetch API sekali |
Chat app, sensor data |
Completion |
Selesai setelah dapat nilai |
Bisa terus mengeluarkan data |
Kesimpulan
Dengan menguasai Future & Stream, kita bisa membangun aplikasi Dart/Flutter yang efisien dan responsive, serta kita bisa mengambil data dari internet, membaca file atau melakukan proses berat yang membutuhkan waktu.