Lompat ke konten utama
←

Flutter Dasar: Dart, Widget, dan State

Pelajaran 4 dari 18

Dart, bahasa di balik Flutter

Future, async, dan await

Setelah pelajaran ini kamu bisa menelusuri urutan keluaran program yang memakai Future, async, dan await, mengenali Future yang lupa ditunggu, dan menangkap galat async dengan try-catch.

  • ±13 menit
  • 3 latihan
  • Diperiksa 28 Okt 2026

Latihan di pelajaran ini butuh akun gratis. Progres, kode, dan catatanmu hanya tersimpan di browser ini. Masuk untuk menyimpannya

Materi

Mengambil data dari internet atau membaca berkas butuh waktu. Supaya layar tidak membeku, fungsi semacam itu mengembalikan Future: janji bahwa nilainya, atau galatnya, tersedia nanti. Future<int> berarti nanti berisi int. Fungsi yang ditandai async selalu mengembalikan Future, dan di dalamnya await menunggu Future lain selesai lalu memberikan nilainya.

Future<int> ambilSaldo() async {
  await Future.delayed(const Duration(milliseconds: 500)); // pura-pura jaringan
  return 250000;
}

Future<void> main() async {
  print('Memuat saldo...');
  final saldo = await ambilSaldo();
  print('Saldo: $saldo');
}

Urutannya perlu dibaca cermat. Fungsi async berjalan seperti fungsi biasa sampai await pertama. Di sana fungsi itu berhenti sementara, dan pemanggilnya langsung melanjutkan baris berikutnya. Baris sesudah await baru berjalan setelah Future-nya selesai. Kalau await lupa ditulis, variabel berisi objek Future itu sendiri, bukan nilainya, sehingga yang tercetak adalah keterangan Instance of 'Future<int>' (di peramban bisa tertulis _Future<int>).

Galat dari Future yang ditunggu dengan await bisa ditangkap dengan try dan catch biasa. on JenisGalat memilih satu jenis galat, catch (e) mengambil objek galatnya, dan finally selalu dijalankan, ada galat atau tidak.

Latihan

0/3 lulus

Jawaban diperiksa di server. Lulus berarti kamu memahami contohnya, bukan penilaian seluruh pekerjaanmu.

Latihan 1 dari 3

Apa urutan baris yang dicetak program ini?

Future<String> ambilNama() =>
    Future.delayed(const Duration(seconds: 1), () => 'Rina');

Future<void> sapa() async {
  print('A');
  final nama = await ambilNama();
  print('B $nama');
}

void main() {
  sapa();
  print('C');
}
Pilih satu jawaban

Latihan 2 dari 3

Apa yang dicetak program ini?

Future<String> ambilNama() =>
    Future.delayed(const Duration(seconds: 1), () => 'Rina');

void main() {
  final nama = ambilNama();
  print('Halo $nama');
}
Pilih satu jawaban

Latihan 3 dari 3

Apa yang dicetak program ini?

Future<int> cekStok(String kode) async {
  if (kode.isEmpty) throw FormatException('kode kosong');
  return 7;
}

Future<void> main() async {
  try {
    print(await cekStok('K01'));
    print(await cekStok(''));
    print('stok kedua terbaca');
  } on FormatException catch (e) {
    print('Galat: ${e.message}');
  } finally {
    print('selesai');
  }
}
Pilih satu jawaban

Catatanmu

Memuat catatan…

tersimpan otomatis, ikut tercetak · 0/4.000

Lanjutkan ke