flusgen is a Command-Line Interface (CLI) tool designed to automate Flutter project scaffolding. It helps developers maintain architectural consistency by generating predefined folder and file structures (e.g., MVVM) or custom layouts defined via JSON.
Tip
Lihat Demo Video: Klik di sini untuk melihat demo penggunaan FlusGen
FlusGen lahir dari kebutuhan untuk mengotomatisasi proses boilerplate yang repetitif saat memulai fitur atau proyek baru di Flutter.
- Penyelerasan Arsitektur: Menjamin setiap fitur mengikuti pola folder yang sama (seperti MVVM), mempermudah kolaborasi tim.
- Structure as Code: Memungkinkan pengembang mendefinisikan seluruh struktur proyek dalam satu file JSON yang mudah dibagikan.
- Efisiensi Alur Kerja: Mengurangi kesalahan pengetikan nama folder/file dan mempercepat fase inisialisasi proyek dari menit ke detik.
Mekanisme inti FlusGen adalah Rekursi Pohon Direktori. Tool ini akan menelusuri setiap key dan value dalam Map (baik internal maupun dari JSON):
- Key: Dianggap sebagai nama Folder. Jika nilainya adalah Map lain, fungsi akan memanggil dirinya sendiri (rekursi) untuk membuat sub-folder.
- Value (List): Dianggap sebagai kumpulan File yang harus dibuat di dalam folder tersebut.
Fitur generate-structure-from-json menggunakan parser dart:convert untuk mengubah file eksternal menjadi struktur memori. Ini memungkinkan fleksibilitas penuh di mana pengembang dapat membuat proyek dengan pola Clean Architecture, Bloc, atau kustom tanpa menyentuh kode sumber FlusGen.
Semua operasi I/O (Create, Rename, Delete) dilakukan secara Synchronous (Sync). Hal ini dipilih untuk memastikan urutan operasi CLI yang prediktif dan mencegah race condition saat membuat folder induk sebelum sub-foldernya.
Proses eksekusi FlusGen dibagi menjadi 4 tahap utama:
- Input Parsing: Menggunakan package
argsuntuk menangkap perintah dari terminal (contoh:generate-structure). - Configuration Loading:
- Untuk perintah default, ia mengambil
defaultStructuredari memory. - Untuk perintah JSON, ia membaca file
.json, melakukan validasi, dan memparsingnya menjadi Map.
- Untuk perintah default, ia mengambil
- Execution Engine: Generator (Folder & File Generator) mulai bekerja dari
basePath(direktori saat ini) dan membangun struktur secara top-down. - Feedback System: CLI memberikan feedback visual (emoji & status) untuk setiap folder/file yang berhasil dibuat atau jika terjadi error (seperti file tidak ditemukan).
- β
Standardized MVVM Structure: Generate otomatis folder
core,data, danfeaturesdengan pola MVVM. - β Custom JSON Scaffolding: Membuat struktur apapun hanya dengan satu file deskriptor JSON.
- β CRUD Folder/File: Operasi cepat untuk tambah, hapus, dan ubah nama folder/file langsung dari CLI.
- β Recursive Creation: Mendukung pembuatan folder bersarang (nested folders) secara otomatis.
- β CLI Feedback: Notifikasi status operasional yang jelas di terminal.
Jalankan perintah ini di terminal Anda:
dart pub global activate flusgenSangat disarankan untuk menambahkan path bin Dart ke Environment Variables Anda agar flusgen bisa dipanggil dari mana saja:
C:\Users\myaasiinh\AppData\Local\Pub\Cache\bin
| Command | Description | Example |
|---|---|---|
generate-structure |
Membuat struktur folder MVVM default | flusgen generate-structure |
generate-structure-from-json <file> |
Membuat struktur dari file JSON | flusgen generate-structure-from-json setup.json |
create-custom-folder <path> |
Membuat folder baru | flusgen create-custom-folder lib/utils |
rename-folder <old> <new> |
Mengubah nama folder | flusgen rename-folder lib/data lib/repository |
delete-folder <path> |
Menghapus folder (recursive) | flusgen delete-folder lib/test_folder |
create-custom-file <path> [content] |
Membuat file baru (opsional dengan konten) | flusgen create-custom-file lib/main.dart |
rename-file <old> <new> |
Mengubah nama file | flusgen rename-file lib/old.dart lib/new.dart |
delete-file <path> |
Menghapus file | flusgen delete-file lib/unused.dart |
{
"lib": {
"core": {
"constants": ["app_strings.dart", "app_colors.dart"],
"utils": ["extensions.dart"]
},
"features": {
"home": {
"view": ["home_page.dart"],
"view_model": ["home_vm.dart"]
}
}
}
}Kami sangat terbuka untuk kontribusi! Silakan fork repository ini, buat branch baru, dan kirimkan Pull Request.
Proyek ini dilisensikan di bawah MIT License.
