Bismillahirrahmannirrahim.
Semisal kita punya baris kode seperti berikut :
void main() {
print("Nama : Indra");
print("Mulai Berhitung");
for (int i = 0; i < 10; i++) {
print('hello ${i + 1}');
}
print("Selesai Berhitung");
}
maka flutter akan mengeksekusi baris kode dan menampilkan hasil tersebut mulai dari atas sampai bawah secara berurutan.
Nama : Indra
Mulai Berhitung
hello 1
hello 2
hello 3
hello 4
hello 5
hello 6
hello 7
hello 8
hello 9
hello 10
Selesai Berhitung
dan ini yang disebut synchronous, untuk membuat menjadi asynchronous kita bisa bungkus kode tersebut dengan fungsi Future(), perhatikan kode berikut :
void main() {
print("Nama : Indra");
Future((){
print("Mulai Berhitung");
});
for (int i = 0; i < 10; i++) {
print('hello ${i + 1}');
}
print("Selesai Berhitung");
}
coba kita jalankan dan lihat hasilnya :
Nama : Indra
hello 1
hello 2
hello 3
hello 4
hello 5
hello 6
hello 7
hello 8
hello 9
hello 10
Selesai Berhitung
Mulai Berhitung
bisa kita lihat kode yang di bungkus oleh Future() tampil terakhir padahal di urutan baris kodenya seperti itu, ini dikarenakan baris ` Future((){ print(“Mulai Berhitung”); });` dijalankan di thread berbeda dengan main thread.
untuk apa asynchronous
Pada contoh kode diatas mungkin tidak terlalu terlihat kegunaan dari asynchronous. Akan tetapi untuk melakukan pekerjaan yang berat, atau pekerjaan yang membutuhkan waktu yang belum dapat kita pastikan kapan pekerjaan itu selesai maka fungsi asynchronous ini akan sangat bermanfaat, salah satu contohnya adalah ketika melakukan permintaan data (request) misal melakukan http request pada API, contoh pada kode berikut :
void main() {
fetchDatapegawai();
print("Mengambil data pegawai");
}
Future<void> fetchDatapegawai(){
//anggap kita sedang melakukan http request API data pegawai
//karena data yang banyak dan juga melalui jaringan maka pemroses cukup memakan waktu
return Future.delayed(Duration(seconds: 5),()=>print("tampilkan data user"));
}
Async dan Await
Penggunaan fungsi asynchronous biasanya disertai dengan 2 keyword yaitu async
dan await
, ada 2 aturan dalam penggunaan keyword ini :
async
diletakkan setelah nama fungsi atau sebelum tanda kurung kurawal pembuka{
.await
hanya bisa dipakai di fungsi yang menggunakan keywordasync
.
Future getAllUser() async {
var response = await http.get(Uri.parse("https://reqres.in/api/users"));
}
untuk contoh lebih lengkap dan bisa dijalankan bisa check di github saya.