Episode ini membahas pengembangan web dengan Dart: kompilasi ke JavaScript dengan dart2js, build tools, interop dengan JavaScript, state management dan manipulasi DOM, serta framework seperti Flutter Web.

Browser masih menjadi platform paling universal di dunia. Dart menjembatani kesenjangan ini dengan mengkompilasi kode menjadi JavaScript yang berjalan di browser mana pun, tanpa memaksa kalian meninggalkan sistem tipe dan tooling Dart. Episode 11 membedah pengembangan web dengan Dart.
Kita akan memakai kompiler dart2js, bekerja dengan tooling build, melakukan interop dengan JavaScript yang sudah ada, mengelola state dan memanipulasi DOM, serta melihat framework seperti Flutter Web.
Di akhir episode, kalian akan memahami kapan memakai Dart untuk web dan bagaimana mencampurnya dengan ekosistem JavaScript yang sudah ada.
Mulai dari template web yang disediakan Dart SDK:
dart create -t web simple_web
cd simple_webdart create -t web simple_web membuat project web dengan web/ sebagai direktori utama dan pubspec.yaml yang berisi dependency web. Jalankan di development dengan dart run build_runner atau dart dev tergantung setup, atau langsung build:
Kompiler dart compile js (bagian dari toolchain dart2js) mengubah kode Dart menjadi JavaScript:
dart compile js web/main.dart -o build/app.jsdart compile js web/main.dart menghasilkan app.js yang bisa disisipkan ke HTML. Kompiler ini juga melakukan tree shaking sehingga hanya kode yang benar-benar dipakai yang masuk ke output.
Untuk pengembangan gunakan mode yang mendukung hot reload dan debugging, misalnya dart run dev dengan dart webdev serve. Untuk produksi, kompilasi release menghasilkan JavaScript yang diminifikasi dan dioptimalkan untuk ukuran serta kecepatan.
Kode Dart dan JavaScript dapat berkomunikasi dua arah melalui package:js:
import 'package:js/js.dart';
@JS('window.confirm')
external bool confirm(String pesan);
void main() {
var jawaban = confirm('Lanjutkan?');
print(jawaban);
}@JS('window.confirm') memetakan fungsi Dart ke fungsi JavaScript native di global window. Interop memungkinkan memakai library JavaScript seperti peta dan chart tanpa menulis ulang.
Pola yang sama berlaku sebaliknya: fungsi Dart bisa diekspos ke JavaScript dengan @JS() dan @anonymous. Ini penting saat integrasi dengan frontend yang sudah dibangun tim lain.
Dart menyediakan akses DOM dengan sintaks yang lebih aman:
import 'package:web/web.dart' as web;
void main() {
var tombol = web.document.querySelector('#tombol');
tombol?.addEventListener('click', (web.Event e) {
web.window.alert('Tombol diklik');
});
}web.document.querySelector('#tombol') mencari elemen DOM, dan addEventListener memasang handler. Package web adalah standar modern pengganti dart:html yang sedang dipensiunkan.
Untuk aplikasi kompleks, kelola state dengan pola yang teruji:
Mulai dari yang paling sederhana dan tambah kompleksitas hanya saat benar-benar dibutuhkan.
Flutter Web menjalankan widget Flutter langsung di browser melalui kompilasi ke JavaScript atau WebAssembly. Kalian menulis UI sekali dengan widget, lalu menjalankannya di mobile, desktop, dan web. Ini jalur paling cepat jika tim sudah memakai Flutter.
AngularDart pernah menjadi pilihan utama untuk aplikasi web besar dengan Dart, namun kini kurang direkomendasikan karena dukungan yang menurun. Untuk aplikasi web yang sepenuhnya Dart tanpa Flutter, pertimbangkan:
flutter create --platforms web web_app
cd web_app
flutter run -d chromeflutter run -d chrome menjalankan aplikasi Flutter di browser dengan hot reload. Jika target kalian murni web tanpa mobile, opsi lain adalah tetap memakai Dart murni dengan dart compile js.
Inti yang harus dibawa pulang:
dart create -t web membentuk project web Dart dengan struktur web/.dart compile js mengubah Dart menjadi JavaScript dengan tree shaking.package:js dan @JS menghubungkan Dart dengan JavaScript dua arah.package:web menggantikan dart:html untuk akses DOM modern.Di episode 12 selanjutnya kita akan membahas Flutter dan cross-platform development — arsitektur Flutter dan integrasi Dart, membuat aplikasi Flutter sederhana, widget tree dan state management dengan hot reload, serta cara berbagi kode Dart antara Flutter dan server.