Belajar Flutter bagi Pengembang Native

Sebagai developer yang sudah terbiasa dengan Java, Kotlin, dan Swift, kamu mungkin sudah sangat akrab dengan XML layout di Android dan Storyboard di iOS. Tapi ketika harus membangun aplikasi lintas platform, muncul pertanyaan besar: Haruskah saya belajar Flutter? Jawabannya: ya, jika kamu ingin efisiensi, modularitas, dan satu codebase untuk dua platform utama.

Blog ini adalah roadmap belajar Flutter yang dirancang khusus untuk kamu yang berasal dari dunia native. Kita akan transisi secara bertahap, tanpa membuang keahlian yang sudah kamu miliki.

🧠 Tahap 1: Memahami Paradigma UI Baru

Flutter menggunakan pendekatan declarative UI berbasis Widget Tree. Ini mirip dengan View Hierarchy di Android atau Scene Graph di iOS.

  • Container = View
  • Text = TextView / UILabel
  • Column = LinearLayout (vertical)
  • Row = LinearLayout (horizontal)
  • Stack = FrameLayout / ZStack

Mulailah dengan membangun layout sederhana menggunakan Scaffold, AppBar, dan BottomNavigationBar. Anggap saja ini seperti membuat Activity atau ViewController.

📐 Tahap 2: Layout & Responsivitas

Kalau kamu terbiasa dengan match_parent, wrap_content, dan AutoLayout, Flutter punya padanannya:

  • Gunakan Expanded, Flexible, dan SizedBox untuk kontrol ukuran.
  • MediaQuery dan LayoutBuilder membantu membuat UI yang adaptif.
  • Hindari dulu animasi atau gesture kompleks—fokus pada layout yang familiar.

Tips: Buat layout nested seperti XML-style agar transisi terasa lebih natural.

🔄 Tahap 3: Navigasi & Lifecycle

Navigasi di Flutter menggunakan Navigator.push() dan pop(), mirip dengan Intent di Android atau segue di iOS.

Lifecycle-nya juga punya padanan:

  • initState() = onCreate() / viewDidLoad()
  • dispose() = onDestroy() / deinit
  • didChangeDependencies() = mirip onResume() atau viewWillAppear()

Dokumentasikan perbandingan lifecycle ini untuk referensi pribadi—sangat membantu saat debugging.

🔥 Tahap 4: Integrasi Firebase & Plugin

Flutter punya ekosistem plugin yang matang, terutama untuk Firebase:

  • firebase_core, firebase_auth, cloud_firestore, firebase_analytics
  • Setup-nya mirip dengan build.gradle dan Info.plist, tapi lewat pubspec.yaml
  • Modularisasi setup agar bisa reuse di proyek lain

Tips: Bandingkan setup Firebase di Flutter vs native untuk insight tambahan.

🧮 Tahap 5: State Management Bertahap

Mulai dari yang paling sederhana:

  • setState() → cocok untuk state lokal
  • Provider → untuk state global yang ringan
  • Riverpod atau Bloc → untuk aplikasi kompleks dan scalable

Jangan langsung lompat ke Bloc atau Redux—biar nggak over-engineered di awal.

🧱 Tahap 6: Modularisasi & Struktur Proyek

Karena kamu suka arsitektur modular, Flutter bisa disusun seperti ini:

Kode

lib/
├── core/
├── shared/
├── features/
│   ├── auth/
│   ├── dashboard/
│   └── settings/

Gunakan pubspec.yaml seperti kamu pakai libs.versions.toml di Gradle. Buat komponen reusable seperti CustomButton, AppTextField, dll.

🔌 Tahap 7: Native Bridge & Optimasi

Kalau kamu butuh akses ke fitur native (sensor, BLE, dll), gunakan Platform Channels:

  • Flutter → Kotlin/Swift → native API
  • Bisa modularisasi channel agar tetap maintainable

Optimasi ukuran APK/IPA:

  • flutter build apk --split-per-abi
  • Deferred loading untuk fitur jarang dipakai
  • Kompres asset dan gunakan tree-shaking

🎯 Kesimpulan: Flutter Bukan Pengganti, Tapi Pelengkap

Flutter bukan berarti meninggalkan Java, Kotlin, atau Swift. Justru, kamu bisa memanfaatkan semua keahlian native untuk membangun aplikasi lintas platform yang efisien dan scalable. Dengan satu codebase, kamu bisa hemat waktu, biaya, dan tenaga—tanpa mengorbankan kualitas.

Kediri, 8 Sep 2025

Project iOS Error dan Lama Tidak Dibuka

Sudah sekian tahun project-project iOS di macbook tidak saya buka. Masalahnya karena sempat pindah device pakai mini PC, yang sekarang rusak, untuk kegiatan sehari-hari.

Selain itu, Xcode yang sudah lama tidak dibuka minta update versi dimana setelah update bisa jadi banyak hal baru yang saya mungkin tidak sempat untuk eksplore. Belum lagi mac OS yang juga harus update kalau jalanin Xcode, begitu juga sebaliknya, akhirnya karena menghindari perputaran update ini, saya jadi malas buka project-project lama iOS saya.

Kondisi ini tidak mungkin saya biarkan seterusnya. Saya sediakan sumber daya pikiran dan waktu untuk mengurai satu per satu.

sdk doesn’t contain libarclite

Ini adalah pesan error pertama setelah buka project xcode.

Setelah mencari berbagai referensi, diminta untuk menaikkan deployment target di project dan juga podfile. Setelah diupdate, diminta menjalankan pod install.

Entah karena apa ternyata pod tidak dikenali. Akhirnya hapus cocoapods dan install ulang.

Waktu menjalankan install ulang cocoapods pakai gem, ternyata ruby nya pakai versi yang sudah udzur. Mau tidak mau install Ruby yang versi lebih baru

Setelah install Ruby versi terbaru, rupanya tidak langsung aktif, masih nyantol ke versi lama. Selanjutnya atur path agar ruby memakai versi yang barusan diinstall.

Ruby dan gem sudah tidak masalah. Masalah muncul di permission denied di docker. Entah kenapa ada sangkut paut sama docker juga disini. Selanjutnya perbaiki hak akses folder.

Waktu tambah path untuk ruby juga sempat ada masalah, karena petunjuk di referensi untuk mac berbasis ARM sedangkan mac saya masih pakai intell.

Setelah semua dilakukan, ternyata masih error yang sama soal libarclite.

Coba baca lagi dengan seksama dan lebih detail. Saya coba update semua yang berkaitan dengan deployment target, mulai dari project hingga semua dependency. Saya naikkan ke iOS 15 semua. Dan, Alhamdulillah berhasil sehingga aplikasi bisa dibuka kembali dan bisa dijalankan di simulator.