Package & pub.dev
Memakai package pihak ketiga dari pub.dev di project Dart.
Gudang kode siap pakai
Menulis semua dari nol itu mulia tapi tidak efisien: kenapa tulis parser tanggal sendiri kalau sudah ada yang teruji jutaan pengguna? pub.dev adalah gudang package Dart/Flutter, dan pubspec.yaml adalah daftar belanjaan proyekmu.
Analogi: pub.dev itu seperti toko bahan bangunan. Kamu tidak menebang pohon sendiri untuk bikin meja; kamu beli kayu yang sudah dipotong rapi. Package = kayu siap pakai.
Kenapa package manager ada?
Tiga alasan: reuse (jangan tulis ulang yang sudah ada), versi terkontrol (semua anggota tim pakai versi sama), dan keamanan (satu tempat tepercaya, bukan copy-paste dari blog acak).
pubspec.yaml: daftar belanja
name: belajarku
description: Proyek belajar Dart.
version: 1.0.0
environment:
sdk: ^3.0.0
dependencies:
http: ^1.2.0 # package dari pub.dev
intl: ^0.19.0
dev_dependencies:
test: ^1.24.0 # hanya untuk development/testingdependencies: dibutuhkan aplikasi saat berjalan.dev_dependencies: hanya saat development (testing, linter).^1.2.0: artinya "1.2.0 atau yang kompatibel" (>=1.2.0, <2.0.0). Ini semantic versioning.
Setelah mengedit, jalankan di terminal:
// Perintah terminal:
dart pub getPerintah ini mengunduh package ke folder .dart_tool dan membuat pubspec.lock yang mengunci versi persisnya.
Memakai package: contoh http
import 'package:http/http.dart' as http;
Future<void> main() async {
var res = await http.get(Uri.parse('https://example.com'));
print('Status: ${res.statusCode}');
print('Panjang body: ${res.body.length}');
}Satu import, langsung punya kemampuan HTTP lengkap. Bandingkan dengan menulis socket manual: ratusan baris.
Contoh kedua, package intl untuk format tanggal:
import 'package:intl/intl.dart';
void main() {
var sekarang = DateTime.now();
print(DateFormat('dd MMMM yyyy').format(sekarang));
print(DateFormat('HH:mm').format(sekarang));
}Memilih package yang bagus
Tidak semua package setara. Cek di pub.dev:
- Skor pub points (maks 160): di atas 110 bagus.
- Terakhir diupdate: dalam 6 bulan terakhir idealnya.
- Null safety: wajib untuk Dart modern.
- Popularitas/likes: indikasi kepercayaan komunitas.
- Dokumentasi & example: package bagus punya contoh jelas.
Jangan tambah package untuk hal sepele yang bisa ditulis 20 baris. Tiap dependensi adalah "utang": harus diupdate, bisa punya bug, bisa ditinggalkan pembuatnya.
Perintah pub esensial
// Perintah terminal:
dart pub get # install deps (setelah clone proyek)
dart pub add http # tambah package + update pubspec otomatis
dart pub remove http # hapus package
dart pub outdated # cek package yang kedaluwarsapubspec.lock mengunci versi persis: commit untuk aplikasi, abaikan (gitignore) untuk library.
Kesalahan umum
1. Lupa dart pub get setelah clone
Error Target of URI doesn't exist: 'package:...' hampir selalu berarti dependensi belum diunduh. Solusinya satu baris: dart pub get.
2. Versi konflik
// Terminal mengeluh version solving failed:
// Artinya dua package butuh versi berbeda dari package ketigaSolusi: update package yang konflik (dart pub upgrade), atau cari versi yang kompatibel di pub.dev. Jangan edit .dart_tool manual.
3. Import package yang belum dideklarasikan
// import 'package:http/http.dart'; // ERROR jika http tidak di pubspecAlur benar: tambah ke pubspec (atau dart pub add) → dart pub get → baru import.
Kesimpulan
pub.dev = gudang, pubspec.yaml = daftar belanja, dart pub get = unduh. Pilih package berkualitas (skor, update, null-safe), dan jangan rakus dependensi.
Catatan teknis: Perintah
dart pub addotomatis memilih versi kompatibel terbaru dan menulis ke pubspec.yaml. Untuk proyek Flutter, perintahnya sama tapi dijalankan viaflutter pub.
Tantangan
Riset package
Buka pub.dev, cari package intl, catat: versi terbaru, skor pub points, dan satu contoh penggunaan DateFormat dari dokumentasinya. Tulis temuanmu sebagai komentar Dart.
void main() {
// TODO: tulis hasil risetmu sebagai komentar
// - Versi intl terbaru: ...
// - Pub points: ...
// - Contoh DateFormat: ...
}