Back to Pengembangan Aplikasi Peranti Bergerak

Flutter Architecture: Widget Trees and Rendering Process

Questions/Cues

  • Mengapa Flutter menggunakan pendekatan komposisi widget?
  • Bagaimana hubungan widget tree dengan proses rendering?
  • Tahapan utama dalam Flutter rendering pipeline
  • Perbedaan widget stateless vs stateful
  • Peran Skia/Impeller dalam proses rendering

Reference Points

  • Lecture_Flutter_Architecture.pptx (Slides 24-30)
  • Flutter_Documentation.pdf (Pages 27-29)

Konsep Dasar Widget Tree

Widget Tree merupakan struktur data hierarkis yang menjadi fondasi pembangunan antarmuka pengguna di Flutter. Setiap elemen UI (tombol, teks, layout) direpresentasikan sebagai widget yang disusun secara parent-child, membentuk pohon komponen yang lengkap. Berbeda dengan pendekatan view tradisional, Flutter menerapkan komposisi widget di mana widget sederhana digabungkan menjadi widget kompleks.

Contoh konkret widget tree sederhana:

  • Scaffold (widget root)
  • AppBar (widget anak)
  • Column (widget anak)
  • Text (widget cucu)
  • Button (widget cucu)

Flutter membedakan dua jenis widget utama:

  1. StatelessWidget: Widget statis yang propertinya tidak berubah setelah dibuat
  2. StatefulWidget: Widget dinamis yang dapat memperbarui tampilannya ketika state internal berubah

Arsitektur Layered Flutter

Flutter mengadopsi arsitektur berlapis yang terdiri dari empat komponen utama:

  1. Dart App Layer: Tempat developer menulis logika bisnis dan komposisi widget
  2. Framework Layer: Menyediakan widget sistem dan API tingkat tinggi
  3. Engine Layer: Bertanggung jawab untuk rasterisasi grafis (menggunakan Dart UI)
  4. Embedder Layer: Menghubungkan dengan sistem operasi dasar

Lapisan ini bekerja secara independen dimana setiap lapisan hanya berkomunikasi dengan lapisan di bawahnya melalui antarmuka yang terdefinisi dengan jelas. Embedder layer ditulis dalam bahasa native platform (Java/C++ untuk Android, Swift/Objective-C untuk iOS) yang memungkinkan Flutter berjalan di berbagai platform.

Proses Rendering Flutter

Proses transformasi widget tree menjadi tampilan visual melibatkan lima tahap utama:

  1. Reconciliation:
  • Membandingkan widget tree baru dengan sebelumnya
  • Mengidentifikasi perubahan menggunakan algoritma linear (O(n))
  • Meminimalkan operasi pembaruan UI
  1. Layout:
  • Menentukan ukuran dan posisi setiap widget
  • Menggunakan constraint-based layout system
  • Melakukan proses dari root widget ke leaf widget
  1. Painting:
  • Memberikan atribut visual (warna, gradient, border)
  • Menggambar setiap widget pada canvas
  • Menggunakan retained rendering untuk optimasi
  1. Compositing:
  • Menggabungkan layer yang telah di-paint
  • Menangani efek transparansi dan overlay
  • Membentuk scene final menggunakan compositor
  1. Rendering:
  • Mengubah scene menjadi instruksi GPU
  • Menggunakan renderer Skia (default) atau Impeller
  • Mengirim frame ke display melalui platform embedder

Proses ini terjadi pada setiap frame animasi, memastikan UI tetap responsif dengan refresh rate tinggi (60-120fps).

Summary

Arsitektur Flutter dibangun berdasarkan konsep widget tree yang menggunakan komposisi hierarkis untuk membangun antarmuka pengguna. Proses rendering melibatkan tahapan reconciliation, layout, painting, compositing, dan GPU rendering yang dioptimalkan untuk performa tinggi. Layered architecture Flutter memisahkan logika aplikasi (Dart), framework widget, engine grafis (Skia/Impeller), dan platform embedder, memungkinkan portabilitas lintas platform. State management yang efisien melalui StatefulWidget memungkinkan pembaruan UI dinamis dengan kinerja optimal.