Paket pub, HTTP & Model Data
Mengelola dependensi dengan pubspec.yaml dan pub.dev, memanggil API dengan paket http, memetakan respons JSON ke model, dan struktur proyek Dart yang rapi.
pub: pengelola paket Dart
Kamu tidak perlu menulis semuanya dari nol. Ribuan paket siap pakai tersedia di pub.dev: HTTP, database, tanggal, enkripsi, dan banyak lagi. Alat dart pub mengunduh dan mengatur paket itu.
Struktur proyek Dart
dart create -t console aplikasi_tugas
aplikasi_tugas/
├── pubspec.yaml # nama proyek, versi SDK, daftar dependensi
├── bin/
│ └── aplikasi_tugas.dart # titik masuk (main)
├── lib/ # kode yang dipakai ulang (class, function)
│ └── tugas.dart
├── test/ # berkas tes
└── analysis_options.yaml # aturan lint
pubspec.yaml
name: aplikasi_tugas
description: Aplikasi daftar tugas konsol.
version: 1.0.0
environment:
sdk: ^3.5.0
dependencies:
http: ^1.2.0 # dipakai saat program berjalan
dev_dependencies:
test: ^1.25.0 # hanya untuk pengembangan
lints: ^5.0.0
| Perintah | Fungsi |
|---|---|
dart pub add http | Menambah paket ke dependencies |
dart pub add --dev test | Menambah ke dev_dependencies |
dart pub get | Mengunduh semua dependensi |
dart pub upgrade | Memperbarui ke versi terbaru yang cocok |
dart pub outdated | Melihat paket yang ketinggalan versi |
Tanda ^1.2.0 artinya "versi 1.2.0 ke atas, tetapi masih seri 1.x" (kompatibel). Berkas pubspec.lock mengunci versi persis yang dipakai agar hasilnya konsisten.
Import: tiga jenis
import 'dart:convert'; // pustaka bawaan Dart
import 'package:http/http.dart' as http; // paket dari pub (pakai alias as)
import 'package:aplikasi_tugas/tugas.dart'; // berkas di lib/ proyekmu sendiri
import 'tugas.dart'; // berkas relatif (satu folder)
Memanggil API dengan paket http
import 'dart:convert';
import 'package:http/http.dart' as http;
Future<void> main() async {
var url = Uri.parse('https://jsonplaceholder.typicode.com/todos/1');
var respons = await http.get(url);
if (respons.statusCode == 200) {
var data = jsonDecode(respons.body) as Map<String, dynamic>;
print(data['title']);
} else {
print('Gagal: ${respons.statusCode}');
}
}
Uri.parsemembangun alamat; untuk parameter query pakaiUri.https('host', '/path', {'q': 'dart'}).- Selalu periksa
statusCode: 200 = sukses, 404 = tidak ada, 500 = error server. - Kirim data:
http.post(url, headers: {'Content-Type': 'application/json'}, body: jsonEncode({...})).
Memetakan respons ke model
Alih-alih memakai Map mentah, ubah JSON ke objek bertipe (seperti bab sebelumnya):
class Todo {
final int id;
final String title;
final bool completed;
const Todo({required this.id, required this.title, required this.completed});
factory Todo.fromJson(Map<String, dynamic> json) => Todo(
id: json['id'] as int,
title: json['title'] as String,
completed: json['completed'] as bool,
);
}
Future<List<Todo>> ambilTodo() async {
var respons = await http.get(Uri.parse('https://jsonplaceholder.typicode.com/todos'));
if (respons.statusCode != 200) {
throw Exception('Gagal memuat (${respons.statusCode})');
}
var list = jsonDecode(respons.body) as List<dynamic>;
return list.map((e) => Todo.fromJson(e as Map<String, dynamic>)).toList();
}
Model dengan field opsional
factory Todo.fromJson(Map<String, dynamic> json) => Todo(
id: json['id'] as int,
title: (json['title'] as String?) ?? '(tanpa judul)', // JSON bisa kehilangan field
completed: json['completed'] == true,
);
Data dari luar tidak boleh dipercaya. Field bisa hilang atau bertipe lain; tangani dengan as Tipe? dan nilai cadangan, atau validasi dengan pattern matching:
if (json case {'id': int id, 'title': String title}) {
print('$id: $title');
}
Paket populer
| Paket | Gunanya |
|---|---|
http / dio | Memanggil API |
intl | Format tanggal, angka, mata uang, terjemahan |
path | Mengelola path berkas lintas OS |
collection | Tambahan utilitas List/Map |
args | Membuat CLI dengan argumen dan opsi |
test | Menulis tes (bab berikutnya) |
Memilih paket dengan bijak
- Periksa skor di pub.dev: likes, pub points, popularity.
- Lihat tanggal pembaruan terakhir dan jumlah issue terbuka.
- Pastikan mendukung null safety dan Dart 3.
Error umum
Target of URI doesn't exist: 'package:http/http.dart'→ belum menjalankandart pub get/dart pub add http.version solving failed→ versi paket bentrok dengan batassdkatau paket lain.SocketException: Failed host lookup→ tidak ada internet atau alamat salah; bungkus dengan try/catch.