Setiap berkas Dart secara otomatis merupakan sebuah pustaka, meskipun tidak menulis arahan library;
Aturan privasi: Pengidentifikasi yang diawali garis bawah _ bersifat privat pustaka, hanya dapat dilihat di dalam pustaka yang sama, tidak dapat diakses lintas berkas/pustaka;
Tidak ada kata kunci public/protected/private; izin akses hanya dibedakan dengan garis bawah;
Pustaka dapat dikemas menjadi package dan dikelola melalui pub;
Kelebihan: Mendukung Tree Shaking untuk menghapus kode mati yang tidak terpakai.
import
Gunakan kata kunci import untuk mengimpor pustaka lain.
import digunakan untuk memuat API dari pustaka lain
Tiga jenis URI:
dart:xxx: Pustaka standar bawaan Dart (dart:core,dart:async,dart:js_interop)package:xxx: Pustaka pihak ketiga yang dikelola pub- Jalur berkas relatif: Berkas
.dartbuatan lokal
// Pustaka standar bawaan
import 'dart:js_interop';
import 'dart:math';
// Paket pihak ketiga
import 'package:test/test.dart';
// Pustaka berkas lokal
import './utils.dart';Code language: JavaScript (javascript)
Alias pustaka as
Jika dua pustaka memiliki kelas/fungsi dengan nama yang sama, gunakan as alias untuk memisahkan dan menghindari konflik nama.
Contoh
Di berkas lib1.dart
class Element {}Code language: JavaScript (javascript)
lib2.dart memiliki kelas dengan nama sama
class Element {}Code language: JavaScript (javascript)
Berkas utama main.dart
// Impor langsung, namespace bawaan
import 'lib1.dart';
// Tetapkan alias lib2
import 'lib2.dart' as lib2;
void main() {
Element e1 = Element(); // Element milik lib1
lib2.Element e2 = lib2.Element(); // Element milik lib2
}Code language: JavaScript (javascript)
Untuk menghindari kebingungan, kita berikan alias lib2 pada lib2.dart, lalu tambahkan awalan alias saat mengakses kelas di dalamnya.
Impor selektif show / hide
show: Hanya impor nama yang ditentukan, semuanya yang lain disembunyikan
// Hanya impor foo, variabel/kelas lain tidak dapat digunakan
import 'lib1.dart' show foo;
void main() {
foo();
// bar(); // Error, tidak diimpor lewat show, tidak dapat diakses
}Code language: JavaScript (javascript)
hide: Impor semuanya, kecuali nama yang ditentukan
// Impor semua, hanya blokir foo
import 'lib2.dart' hide foo;
void main() {
bar();
// foo(); // Error, disembunyikan oleh hide
}Code language: JavaScript (javascript)
Pemuatan tertunda deferred as
Hanya berfungsi pada platform Web
- Mengurangi ukuran muat awal halaman web;
- Digunakan untuk popup jarang dipakai, halaman opsional;
- Mengunduh potongan kode secara dinamis sesuai kebutuhan.
- Sintaks impor:
import jalur deferred as namespace - Panggil
namespace.loadLibrary()yang mengembalikan Future, gunakanawaituntuk menunggu proses muat selesai - Pemanggilan berulang
loadLibrary()untuk pustaka yang sama hanya akan memuat satu kali - Batasan: Konstanta dan tipe data di dalam pustaka tertunda tidak dapat digunakan langsung sebelum dimuat
Contoh lengkap
hello.dart (pustaka pemuatan tertunda)
void printGreeting() {
print("Hello from deferred library wellcome to foxdevelop.com");
}
Code language: JavaScript (javascript)
main.dart
// Impor tertunda, alias hello
import 'hello.dart' deferred as hello;
Future<void> greet() async {
// Muat pustaka secara dinamis
await hello.loadLibrary();
// Hanya setelah muat selesai dapat memanggil metode internal
hello.printGreeting();
}
void main() async {
await greet();
}
Code language: JavaScript (javascript)
Hasil keluaran:
Hello from deferred library wellcome to foxdevelop.com
Code language: JavaScript (javascript)
Simpan kedua berkas di folder yang sama

Bagaimana jika hello.dart berada di direktori lain, misal folder lib tingkat atas?
Contoh jalur: D:\dartdemo\firstdart\lib
main.dart ada di D:\dartdemo\firstdart\bin
firstdart/
├─ bin/
│ └─ firstdart.dart // Titik masuk program
└─ lib/
└─ hello.dart // Pustaka pemuatan tertundaCode language: JavaScript (javascript)
Maka tulis impor seperti ini
// ../ berarti direktori induk
import '../lib/hello.dart' deferred as hello;Code language: JavaScript (javascript)
Deklarasi pustaka paling atas library
Ditulis di bagian paling atas berkas, digunakan untuk komentar dokumentasi pustaka dan anotasi tingkat pustaka (contoh: batasan platform pengujian).
/// Pustaka alat uji khusus browser
@TestOn('browser')
library;
Code language: JavaScript (javascript)
export
Ekspor (enkapsulasi API publik terpadu)
Sering dipakai saat membuat paket alat, menggabungkan beberapa subpustaka dan hanya mengekspos satu titik impor luar.
Struktur berkas
src/math.dart
int add(int a, int b) => a + b;
int sub(int a, int b) => a - b;
Code language: PHP (php)
src/string.dart
String upper(String s) => s.toUpperCase();
Code language: JavaScript (javascript)
utils.dart (titik ekspor terpadu)
export 'src/math.dart';
export 'src/string.dart';
// Sembunyikan alat internal privat
export 'src/internal.dart' hide helper;
Code language: JavaScript (javascript)
utils.dart tidak dapat dijalankan sendiri hanya berkas penggabung ekspor tanpa fungsi masuk main(), tidak bisa menjalankan dart run lib/utils.dart;
Fungsi export
- Menggabungkan API dari beberapa subberkas src;
- Pengguna hanya perlu mengimpor satu berkas
utils.dartuntuk mendapatkan semua metode yang diekspos; hide xxxmenyembunyikan alat internal, mengenkapsulasi detail implementasi dan mengontrol API publik yang terpapar.
Penggunaan di main.dart
import 'utils.dart';
void main() {
print(add(1,2));
print(upper("dart"));
}
Code language: JavaScript (javascript)
Catatan penting
export/importhanya melakukan impor dan ekspor tingkat kode sumber, jika mendistribusikan berkas sumber.dart, orang lain dapat melihat seluruh kode sumber;Untuk menyembunyikan kode sumber, Anda harus tidak mempublikasikan berkas sumber
.dart, hanya mendistribusikan Snapshot biner hasil kompilasi.Snapshot adalah berkas biner hasil kompilasi Dart, tidak dapat dibalik menjadi kode sumber terbaca secara utuh, hanya dapat memanggil API yang diekspos.
Materi ini dibahas di modul lain.
part
Pisah satu pustaka menjadi beberapa berkas
Satu pustaka dipisah menjadi beberapa berkas yang saling berbagi pengidentifikasi privat garis bawah. Wajib pasangkan part 'xxx.dart' / part of 'berkas_utama.dart'
main_lib.dart (berkas pustaka utama)
library; // Nyatakan berkas ini adalah pustaka
part 'logic.dart'; // Gabungkan logic.dart ke pustaka saat ini, keduanya satu pustaka
int _secret = 999; // Variabel privat pustaka
Code language: JavaScript (javascript)
logic.dart (berkas bagian terpisah)
part of 'main_lib.dart'; // Nyatakan berkas ini milik main_lib.dart, bukan pustaka mandiri.
void printSecret() {
// Dapat mengakses _secret dari berkas utama, variabel privat satu pustaka saling terlihat
print(_secret);
}
Code language: JavaScript (javascript)
Cara pemanggilan
import 'main_lib.dart'; // Impor pustaka utama, JANGAN impor berkas bagian
void main() {
printSecret(); // Keluaran 999
}
Code language: JavaScript (javascript)
Impor bersyarat
Otomatis ganti berkas implementasi sesuai platform eksekusi
import 'platform_stub.dart'
if (dart.library.io) 'platform_mobile.dart'
if (dart.library.js_interop) 'platform_web.dart';
Code language: JavaScript (javascript)