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.

Part 18 dari 20 ± 50 menit Gratis

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
PerintahFungsi
dart pub add httpMenambah paket ke dependencies
dart pub add --dev testMenambah ke dev_dependencies
dart pub getMengunduh semua dependensi
dart pub upgradeMemperbarui ke versi terbaru yang cocok
dart pub outdatedMelihat 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.parse membangun alamat; untuk parameter query pakai Uri.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

PaketGunanya
http / dioMemanggil API
intlFormat tanggal, angka, mata uang, terjemahan
pathMengelola path berkas lintas OS
collectionTambahan utilitas List/Map
argsMembuat CLI dengan argumen dan opsi
testMenulis 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 menjalankan dart pub get/dart pub add http.
  • version solving failed → versi paket bentrok dengan batas sdk atau paket lain.
  • SocketException: Failed host lookup → tidak ada internet atau alamat salah; bungkus dengan try/catch.

Praktikkan langsung, gratis

Tulis dan jalankan kode langsung di browser, dapatkan penilaian otomatis. Daftar gratis kapan saja untuk menyimpan progres dan meraih sertifikat.

Coba latihan sekarang, tanpa daftar
Bagikan: WhatsApp Facebook LinkedIn X