Terdapat dua cara dalam melakukan Import di Flutter atau Dart, yaitu dengan Relative import dan Package import.
Contoh relative import:
import 'file.dart';
import 'dir/file.dart';
import '../dir/file.dart';
Contoh package import:
import 'package:my_package/file.dart';
Selain kenyamanan programmer, mari kita coba list keuntungan dari setiap cara import
Keuntungan dari Relative Imports
1. Rekomendasi dari Dart team
Dart merekomendasikan kita untuk melakukan relative import (sumber)
2. Banyak digunakan
Dari 30 dart package yang populer, 3 package yang menggunakan package imports, 13 package menggunakan relative import, dan 14 package lainnya adalah satu file saja atau membagi file menggunakan part.
3. Terkelompok
Pengelompokan ini bisa terbagi menjadi 3 kelompok yaitu, dart libraries, package imports, dan relative imports. Dart menyarankan baris kosong antar kelompok, dan hal ini akan mempermudah programmer tentunya dalam membaca package-package yang diimport pada suatu file. Kita juga bisa menggunakan bantuan IDE terkait hal ini.
import 'dart:async';
import 'dart:io';
import 'package:other1/other1.dart';
import 'package:other2/other2.dart';
import 'file1.dart';
import 'file2.dart';
4. Konsisten dengan Exports
Menggunakan relative dan package secara bersamaan ketika melakukan export itu sangat memungkinkan:
export 'package:my_package/src/file.dart';
export 'src/file.dart';
- Tapi biasanya kita melakukan export untuk file yang ada dibawah directory, jadi kita bakalan jarang menggunakan “..”
- Dengan menggunakan cara yang sama untuk export membuat code kita lebih konsisten
5. Lebih cepat dalam rekomendasi
Ketika kita melakukan pengetikan import manual dengan “package”, kita harus memulai pencarian dengan keyword tersebut yang mana juga akan menampilkan package-package lain yang kita gunakan.
6. Lebih singkat
Tidak jarang kita melakukan import untuk file di directory yang sama, hal ini tentu akan membuat code importnya lebih singkat.
Package import:
import 'package:my_package/useCase/jump.dart';
Relative import:
import 'jump.dart';
Keuntungan dari Package Imports
1. Lebih mudah ketika ada pemindahan file
Ketika kita melakukan pemindahan file ke directory lain, kita cukup menambahkan atau mengurangi dircetory. Hal ini mungkin lebih mudah dilakukan dari pada memperbaiki “..” di relative import.
Kita juga terbantu dengan fungsi refactor yang disediakan IDE, atau jika refactor tidak berjalan dengan baik, setidaknya kita bisa juga menggunakan find all & replace karena text importnya bakalan persis sama dimanapun filenya digunakan. Berbeda dengan relative import.
2. Satu baris lebih singkat
Pada package import kita bakalan membagi importnya menjadi 3 kelompok. Tapi karena kita menggunakan package tentu importnya akan menjadi 2 saja, karena code kita akan terkelompok bersamaan dengan package lain.
Lints
- Untuk relative import, gunakan lint prefer_relative_imports
- Untuk package import, gunakan lint always_use_package_imports
Berikut dua rule yang disampaikan di dokumentasi:
1. directory src
Directory src di bawah lib biasanya diperuntukan untuk area private dari suatu library. Pengembang package akan sering melakukan perubahan pada file-file yang terdapat pada directory ini. Jadi melakukan import directory src memungkinkan untuk membuat code kita jadi error.
* Biasanya pengembang package melakukan export code agar pengguna tidak secara otomatis melakukan import file di directory src.
- linter rule: implementation_imports
2. directory lib
Ketika kita melakukan test seperti unit test, tidak jarang kita melakukan import dari file code kita. Nah tidak diperbolehkan untuk mengakses kedalam ataupun keluar dari directory lib. Dart akan menganggapnya sebagai library atau sumber code yang berbeda, dan hal ini juga akan membinggungkan Dart dan juga kita sebagai programmer.
Oleh karena itu untuk mengakses file di directory lib dari directory test gunakanlah package import.
- linter rule: avoid_relative_lib_imports
Kesimpulan
Mimin sendiri menggunakan relative imports di code di directory lib dan keduanya untuk code di directory test.
Tapi kenyamanan juga menjadi salah satu faktor juga ya, jadi dikembalikan kepada anda dan team untuk memilih cara import.
Sumber tulisan:
- https://medium.com/flutter-senior/relative-imports-vs-package-imports-in-dart-76a0c035e001
- https://stackoverflow.com/questions/59693195/flutter-imports-relative-path-or-package
Oh iya di website ini ada tulisan menarik lainnya juga loh, seperti berikut: