dartpackagepubMahir4 mnt baca

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

yaml
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/testing
  • dependencies: 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:

dart
// Perintah terminal:
dart pub get

Perintah ini mengunduh package ke folder .dart_tool dan membuat pubspec.lock yang mengunci versi persisnya.

Memakai package: contoh http

dart
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:

dart
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:

  1. Skor pub points (maks 160): di atas 110 bagus.
  2. Terakhir diupdate: dalam 6 bulan terakhir idealnya.
  3. Null safety: wajib untuk Dart modern.
  4. Popularitas/likes: indikasi kepercayaan komunitas.
  5. 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

dart
// 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 kedaluwarsa

pubspec.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

dart
// Terminal mengeluh version solving failed:
// Artinya dua package butuh versi berbeda dari package ketiga

Solusi: 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

dart
// import 'package:http/http.dart'; // ERROR jika http tidak di pubspec

Alur 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 add otomatis memilih versi kompatibel terbaru dan menulis ke pubspec.yaml. Untuk proyek Flutter, perintahnya sama tapi dijalankan via flutter 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.

text
void main() {
  // TODO: tulis hasil risetmu sebagai komentar
  // - Versi intl terbaru: ...
  // - Pub points: ...
  // - Contoh DateFormat: ...
}