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

Emulator Android Studio Tidak Mau Jalan

Saya baru saja pindah laptop dari yang sebelumnya pakai thinkpad x200 dan macbook ke thinkpad t480s, saya pikir menjalankan emulator Android adalah hal sepele yang langsung jalan seperti sebelumnya. Ternyata tidak. Di tengah proses pengujian aplikasi, saya justru terjebak dalam masalah yang membuat saya hampir menyerah: emulator Android tidak mau jalan sama sekali.

Berikut kronologi dan poin-poin kesulitan yang saya hadapi, serta bagaimana akhirnya saya bisa menemukan solusi yang bekerja.

⚠️ 1. Emulator Selalu Berhenti Saat Proses Start

Setiap kali saya mencoba menjalankan emulator dari Android Studio, proses hanya sampai tahap “starting emulator” lalu berhenti begitu saja. Tidak ada error fatal, hanya pesan samar seperti “started new renderthread total 17” sebelum jendela emulator hilang tanpa jejak. Tidak ada log yang jelas, tidak ada crash report. Hanya mati begitu saja dengan pesan terminated.

🔧 2. Virtualization Sudah Diaktifkan di BIOS

Langkah pertama tentu saya cek BIOS. Di ThinkPad T480s, saya pastikan Intel Virtualization Technology dan VT-d sudah aktif. Tapi emulator tetap tidak bisa dijalankan. Ini membuat saya curiga bahwa masalahnya bukan di level BIOS, melainkan di lapisan software atau driver.

📦 3. Install Semua Komponen Emulator di SDK Manager

Saya buka Android Studio → SDK Manager → SDK Tools. Di sana saya install semua yang berkaitan dengan emulator:

  • Android Emulator
  • Emulator Hypervisor Driver
  • Platform SDK terbaru

Namun, hasilnya nihil. Emulator tetap tidak bisa dijalankan. Bahkan mencoba versi SDK yang lebih lama pun tidak membantu.

🧪 4. Coba Buat AVD Berbasis ARM—Tetap Gagal

Saya cari referensi dan menemukan mungkin masalahnya ada di image x86_64, jadi saya coba buat AVD berbasis ARM64 + Google APIs. AVD tidak berhasil dibuat karena setelah berbagai cara tidak ditemukan versi ARM.

🎛️ 5. Uji Coba Mode Grafis: Automatic, Hardware, Software

Saya mulai bereksperimen dengan konfigurasi grafis di AVD Manager:

  • Automatic → emulator tetap mati
  • Hardware → muncul warning bahwa GPU tidak mendukung Vulkan
  • Software → akhirnya emulator bisa jalan!

✅ 6. Solusi: Mode Software adalah Penyelamat

Setelah semua upaya gagal, saya ubah mode grafis emulator ke Software. Hasilnya? Emulator akhirnya bisa berjalan stabil. Memang performanya tidak secepat hardware acceleration, tapi cukup untuk debugging dan pengujian UI.

🎯 Kesimpulan

Masalah emulator Android yang tidak mau jalan bisa berasal dari banyak lapisan: BIOS, driver GPU, SDK configuration, bahkan mode grafis. Dalam kasus saya, mode grafis hardware (Vulkan/OpenGL) tidak kompatibel dengan GPU Intel UHD, dan hanya mode software yang bisa menyelamatkan.

Jika kamu mengalami hal serupa, jangan menyerah. Coba ubah mode grafis, pastikan virtualisasi aktif, dan jangan ragu untuk bereksperimen dengan AVD berbasis ARM atau x86_64. Kadang solusi paling sederhana—seperti memilih mode software—adalah yang paling efektif.

P9, 29 Agustus 2025

Korban Ke-2 PZEM-004T

1 Agu 2025.

Kali ini saya tidak tau apa penyebabnya, tiba-tiba pzem-004T saya tidak memberikan respon. Dua indikator tx dan rx menyala terang, tidak berkedip, kedua-duanya.

Awalnya setelah kejadian terbakar yang lalu karena salah sambung, saya beli pzem-004T lagi, dengan tekad untuk berhati-hati. Proses sambung dan testing juga berjalan dengan lancar. Modul ESP juga bisa membaca nilainya.

Saat ditempatkan di dalam box dan dipasang di tempat pengukuran, pzem ini tiba-tiba tidak memberikan respon. Kedua led indikator tx dan rx menyala terang dan tidak berkedip. ESP 01 yang dipakai untuk membaca nilainya juga terasa sangat panas ketika disentuh.

Akhirnya saya copot lagi dari tempat pengukuran, saya coba lagi tetap tidak ada respon. Sampai saat ini saya belum menemukan jawabannya kenapa bisa rusak.

foto saat dimasukkan kedalam kotak dan siap untuk dipasang ditempat

Korban Satu PZEM-004T

Kediri, 21 Juli 2025

Kesalahan akibat human error kali ini menimbulkan korban satu Pzem-004T, alat monitoring beban arus AC, terbakar dan mati.

✨ Awal Eksperimen: Membaca Data dari PZEM-004T TTL

Sebagai pecinta sistem monitoring energi, saya mencoba membaca data dari PZEM-004T TTL—modul mungil yang bisa mengukur tegangan, arus, dan daya secara real-time. Dengan hanya ESP8266 dan kabel jumper, saya rasa tidak ada hal rumit yang perlu dikhawatirkan. Tanpa RS485 converter, proses jadi jauh lebih sederhana.

📑 Membaca Datasheet dan Manual Pabrik

Saya baca datasheet dan manual resmi dari Peacefair, mencoba memahami dengan cermat pinout dan cara kerja. Pin RX dan TX saya hubungkan ke GPIO ESP8266, CT ke salah satu jalur AC, dan input power langsung dari colokan rumah. Diagram wiring terlihat solid. Saya yakin dengan skema ini.

🔌 Menyambungkan dan Menyalakan Colokan AC

Dengan penuh semangat, saya nyalakan sistem… dan seketika — TSSHHH! terjadi ledakan kecil disertai percikan api dan asap dari modul. Bau terbakar langsung menusuk hidung. Saya terkejut, jantung rasanya ikut nyala bareng PZEM.

🔍 Membaca Ulang Manual (dengan Wajah Tertunduk)

Setelah modul jadi korban, saya buka manual lagi. Ternyata… kesalahan fatal ada pada jalur AC dan CT. Saya memasang jalur AC di jalur CT, padahal arus AC harus sesuai sambungannya. Modul tidak dirancang untuk menahan kesalahan wiring seperti ini.

🧠 Pasrah dan Jadi Pembelajaran

Saya pasrah. PZEM-004T saya gugur, tapi pelajaran yang saya dapat sangat mahal nilainya:

  • Modul TTL memang praktis, tapi posisi jalur AC dan posisi CT sangat krusial.
  • Manual harus dibaca lebih dari sekali, jangan hanya sekilas.
  • Selalu uji koneksi dengan simulasi daya minimal sebelum full-on colokan AC.

Membaca PZEM-004T

Membaca nilai dari PZEM-004T sangat sederhana dan jelas karena terdapat library yang langsung tinggal pakai. Koneksinya juga tidak rumit karena langsung menggunakan interface tx dan rx yang bisa langsung dihubungkan dengan ESP.

PZEM-004T adalah modul sensor untuk membaca parameter aliran listrik AC seperti Voltase, Power, Energy, Frequency, dan Power Factor.

Wiring-nya juga sangat sederhana hubungkan modul pzem dengan ESP, Tx-Rx dan Rx-Tx. Tambahkan library dan tuliskan kode seperti dibawah. Jika semua sudah benar, harusnya akan menampilkan hasil bacaan pada serial monitor.

#include <SoftwareSerial.h>
#include <PZEM004Tv30.h>

#define RX_PIN 4  // D2
#define TX_PIN 5  // D1

SoftwareSerial pzemSerial(RX_PIN, TX_PIN);
PZEM004Tv30 pzem(pzemSerial);

void setup() {
  Serial.begin(115200);
  pzemSerial.begin(9600);
  Serial.println("Monitoring PZEM-004T via ESP8266");
}

void loop() {
  float voltage = pzem.voltage();
  float current = pzem.current();
  float power   = pzem.power();
  float energy  = pzem.energy();
  float frequency = pzem.frequency();
  float pf = pzem.pf();

  if (isnan(voltage)) {
    Serial.println("Gagal membaca data dari sensor");
  } else {
    Serial.printf("Tegangan: %.2f V\n", voltage);
    Serial.printf("Arus: %.2f A\n", current);
    Serial.printf("Daya: %.2f W\n", power);
    Serial.printf("Energi: %.3f kWh\n", energy);
    Serial.printf("Frekuensi: %.1f Hz\n", frequency);
    Serial.printf("Power Factor: %.2f\n", pf);
    Serial.println("-----------------------------");
  }

  delay(1000);
}

HATI-HATI!!!

karena modul ini mengukur tegangan tinggi, jadi pastikan secara berulang kali kalau koneksi sudah benar dan aman.!

Juli 2025