Kembali ke semua artikel
  • Flutter
  • Dart
  • Struktur Proyek
  • Pemula

Bedah Struktur Folder Flutter & Anatomi main.dart: Panduan Pemula

Saat pertama kali membuat project Flutter, puluhan file otomatis di-generate. Artikel ini membedah struktur folder dan anatomi file main.dart baris demi baris untuk pemula.

·8 menit baca
Diagram hierarki folder proyek Flutter beranotasi

Pada artikel sebelumnya, kita sudah berhasil mengonfigurasi Flutter SDK, Android toolchain, dan VS Code hingga lolos verifikasi flutter doctor. Sekarang saatnya kita masuk ke dunia kode yang sesungguhnya.

Saat pertama kali membuat project baru, Flutter akan men-generate puluhan file dan folder secara otomatis. Bagi pemula, tampilan ini sering kali terasa membingungkan: folder mana yang boleh diedit, folder mana yang jangan disentuh, dan dari mana aplikasi sebenarnya mulai dieksekusi?

Di artikel ini, kita akan membedah struktur direktori project Flutter serta mengupas tuntas anatomi file lib/main.dart baris demi baris.

Membuat Project Flutter Pertama

Buka terminal di VS Code atau terminal sistem Anda, arahkan ke direktori kerja, lalu jalankan perintah berikut:

bash
flutter create belajar_flutter_dasar cd belajar_flutter_dasar code .

Perintah di atas akan membuat satu workspace lengkap yang siap dijalankan di berbagai platform.

Memahami Struktur Folder Project Flutter

Berikut adalah peta folder utama yang dihasilkan oleh Flutter:

plaintext
belajar_flutter_dasar/ ├── android/ # Native project untuk platform Android (Gradle/Kotlin) ├── ios/ # Native project untuk platform iOS (Xcode/Swift) ├── web/ # Entry point untuk Flutter Web (index.html) ├── windows/ # Native runner untuk Windows Desktop ├── macos/ # Native runner untuk macOS Desktop ├── linux/ # Native runner untuk Linux Desktop ├── lib/ # PUSAT KODING: Semua kode Dart Anda ada di sini │ └── main.dart # Entry point utama aplikasi ├── test/ # Unit testing dan widget testing ├── pubspec.yaml # Konfigurasi dependensi, aset gambar, dan font └── pubspec.lock # Pengunci versi paket dependensi

Folder yang Perlu Anda Fokuskan

  • lib/: Ini adalah dapur utama Anda. Sekitar 95% waktu ngoding Anda akan dihabiskan di dalam folder ini. File lib/main.dart adalah titik masuk pertama saat aplikasi dijalankan.
  • pubspec.yaml: File konfigurasi utama. Di sini Anda menambahkan library pihak ketiga (package dari pub.dev), mendaftarkan gambar/aset lokal, serta mengatur custom font. Catatan penting: file ini menggunakan format YAML yang sangat sensitif terhadap spasi (indentasi).
  • Folder Native Platform (android/, ios/, dll): Folder-folder ini adalah wrapper native. Anda biasanya hanya menyentuhnya ketika perlu mengatur konfigurasi level OS, seperti mengubah ikon aplikasi, mengganti package name/bundle ID, atau mengatur izin akses kamera dan lokasi (permissions).

Anatomi dan Bedah File lib/main.dart

Mari kita bersihkan boilerplate bawaan counter app dan buat versi minimalis yang bersih agar konsepnya mudah dipahami. Ganti isi lib/main.dart dengan kode berikut:

dart
import 'package:flutter/material.dart'; void main() { runApp(const MyApp()); } class MyApp extends StatelessWidget { const MyApp({super.key}); @override Widget build(BuildContext context) { return MaterialApp( title: 'Aplikasi Pertama', debugShowCheckedModeBanner: false, theme: ThemeData( colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple), useMaterial3: true, ), home: const HomePage(), ); } } class HomePage extends StatelessWidget { const HomePage({super.key}); @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: const Text('Beranda Flutter'), backgroundColor: Theme.of(context).colorScheme.inversePrimary, ), body: const Center( child: Text( 'Halo, ini aplikasi Flutter pertama saya!', style: TextStyle(fontSize: 16), ), ), ); } }

Mari kita bedah kode di atas menjadi 4 bagian krusial:

1. Function main() dan runApp()

dart
void main() { runApp(const MyApp()); }

main(): Titik awal eksekusi program Dart.

runApp(): Fungsi bawaan Flutter yang bertugas mengambil root widget (MyApp) dan merendernya ke layar perangkat.

2. Widget Root: MaterialApp

dart
return MaterialApp( title: 'Aplikasi Pertama', theme: ThemeData(...), home: const HomePage(), );

MaterialApp adalah pembungkus utama yang menyediakan desain sistem berbasis Material Design. Widget ini mengatur tema global, navigasi/routing, dan menentukan halaman pertama yang tampil lewat properti home.

3. Struktur Layout Dasar: Scaffold

dart
return Scaffold( appBar: AppBar(...), body: Center(...), );

Scaffold adalah kanvas struktur layout standar aplikasi mobile. Widget ini menyediakan slot bawaan yang siap pakai, seperti:

  • appBar: Bar navigasi di bagian atas layar.
  • body: Area konten utama aplikasi.
  • floatingActionButton: Tombol aksi melayang di sudut bawah.
  • bottomNavigationBar: Menu navigasi di bawah layar.

4. Widget Tree (Pohon Komponen)

Perhatikan bagaimana layout di dalam body disusun:

plaintext
Scaffold ➔ body ➔ Center ➔ child ➔ Text

Flutter menggunakan konsep hirarki pohon widget (Widget Tree). Setiap widget induk (parent) membungkus widget anak (child/children) untuk menyusun tata letak visual secara deklaratif.

Kesimpulan

Memahami struktur folder dan anatomi main.dart memberikan peta jalan yang jelas saat mulai mengembangkan aplikasi. Anda tahu di mana harus menaruh file aset, di mana mengonfigurasi dependensi, dan bagaimana susunan MaterialApp serta Scaffold bekerja sebagai kerangka dasar.

Di artikel berikutnya (Part 4), kita akan membahas Teknik Layout Dasar di Flutter: Menguasai Container, Row, Column, dan ListView.

Artikel terkait